Как исправить: ошибка типа: ожидаемый строковый или байтовый объект
Ошибка, с которой вы можете столкнуться при использовании Python:
TypeError : expected string or bytes-like object
Эта ошибка обычно возникает, когда вы пытаетесь использовать функцию re.sub() для замены некоторых шаблонов в объекте, но объект, с которым вы работаете, не является полностью строкой.
В следующем примере показано, как исправить эту ошибку на практике.
Как воспроизвести ошибку
Предположим, у нас есть следующий список значений:
#define list of values
x = [1, 'A', 2, 'B', 5, 'C', 'D', 'E']
Теперь предположим, что мы пытаемся заменить все небуквы в списке пустой строкой:
import re
#attempt to replace each non-letter with empty string
x = re. sub (' [^a-zA-Z] ', '', x)
TypeError : expected string or bytes-like object
Мы получаем ошибку, поскольку некоторые значения в списке не являются строками.
Как исправить ошибку
Самый простой способ исправить эту ошибку — преобразовать список в строковый объект, обернув его оператором str() :
import re
#replace each non-letter with empty string
x = re. sub (' [^a-zA-Z] ', '', str (x))
#display results
print (x)
A B C D E
Обратите внимание, что мы не получаем ошибку, поскольку сначала использовали str() для преобразования списка в строковый объект.
Результатом является исходный список, в котором каждая небуква заменена пробелом.
Примечание . Полную документацию по функции re.sub() можно найти здесь .
Дополнительные ресурсы
В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:
Как исправить ошибку KeyError в Pandas
Как исправить: ValueError: невозможно преобразовать число с плавающей запятой NaN в int.
Как исправить: ValueError: операнды не могут быть переданы с помощью фигур.