Автор оригинала: Shubham Sayon.
Вступление
Цель: В этом руководстве наша цель – исправить следующее исключение Типерр: Требуется байт объект, а не «ул»
А также обсудить подобные исключения наряду с их решениями.
Пример: Рассмотрим следующий файл « Scores.txt ‘ который содержит оценки некоторых случайных кандидатов.
Теперь, давайте попробуем получить доступ к оценке, полученному Ravi из файла с помощью простой программы.
with open("scores.txt","rb") as p: lines = p.readlines() for line in lines: string=line.split('-') if 'Ravi' in string[0]: print('Marks obtained by Ravi:',string[1].strip())
Выход:
Traceback (most recent call last): File "main.py", line 4, instring=line.split('-') TypeError: a bytes-like object is required, not 'str'
Объяснение:
Как вы можете видеть, мы получили исключение TypeError: нужный байт объект, а не «STR» Так как мы пытались разделить байты «Объект с использованием сепаратора» ул ‘ тип.
Таким образом, чтобы исправить нашу проблему, прежде всего, давайте понять, что Типеррор является?
🐞 Что такое Типеррор в Python?
Типеррор
является одним из наиболее распространенных проблем с программистами Python.
- Он поднят всякий раз, когда вы используете неверный или неподдерживаемый тип объекта в программе.
- Он также поднят, если вы попытаетесь вызвать не вызываемый объект или если вы повторяете неверный идентификатор.
- Например, если вы попытаетесь добавить ‘
int
«Объект с»ул ...| '.
- Например, если вы попытаетесь добавить ‘
Пример:
a = 1 b = 2 c = 'Three' print(a + b + c) # Trying to add 'int' objects with 'str'
Выход:
Traceback (most recent call last): File "main.py", line 4, inprint(a + b + c) # Trying to add 'int' objects with 'str' TypeError: unsupported operand type(s) for +: 'int' and 'str'
Решение: Чтобы исправить вышеуказанную проблему, вы можете либо предоставить « » int
«Объект для переменной c
Или вы можете попечить переменную A и B до « ул ...| ' тип.
a = 1 b = 2 c = 3 # error fixed by using int object print(a + b + c) # Output: 6
С тех пор как у нас есть идея о Видеораторы В Python, давайте обсудим – что такое Типерр: Требуется байт объект, а не «ул» ?
📌 Что такое типа: Требуется подобный байт объект, а не «ул»?
TypeError: нужен байт объект, а не «STR» поднят, когда вы пытаетесь использовать « » ул ...| «Объект в операции, которая поддерживает только«
» Байты ' объект.
Поэтому, когда вы посмотрите вышеприведенный пример, который включает в себя извлечение данных из ‘scores.txt’ мы пытаемся использовать « ул ...| «Разделить
Байт объект, который является неподдерживаемой операцией. Таким образом, Python поднимает Типеррор Отказ
❖ Как Исправить TypeError: нужен байт объект, а не «STR» ?
Есть многочисленные решения для решения вышеупомянутого исключения. Вы можете использовать выбрать, что, кажется, больше подходит для вашей программы. Давайте погрузимся в них один за другим.
🖊️ Решение 1: замена «RB» с «RT»
Вы можете просто изменить режим из ‘ RB
‘I.e. Двоичный двоичный для чтения для’ RT
‘i.e. Текст только для чтения. Вы даже можете использовать ‘ r
‘ Это означает только для чтения Режим, который является режимом по умолчанию для Открыть ()
Отказ
with open("scores.txt", "rt") as p: # using rt instead of rb lines = p.readlines() for line in lines: string = line.split('-') if 'Ravi' in string[0]: print('Marks obtained by Ravi:', string[1].strip())
Выход:
Marks obtained by Ravi: 65
Таким образом, как только файл открыт в Текстовый режим Вам больше не нужно иметь дело с байтовым объектом и легко работать с строками.
🖊️ Решение 2: добавление префикса ‘B’
Вы можете просто добавить префикс ‘ B
«До разделителя в пределах Сплит ()
метод. Этот префикс гарантирует, что вы можете работать на Байт
объект.
with open("scores.txt", "rb") as p: # using prefix b lines = p.readlines() for line in lines: string = line.split(b'-') if b'Ravi' in string[0]: print('Marks obtained by Ravi:', string[1].strip())
Выход:
Marks obtained by Ravi: b'65'
🖊️ Решение 3: Использование метода декодирования ()
❖ декодировать ()
это метод Python, который преобразует одну схему кодирования, в которой строка аргумента кодируется в другой желаемой схеме кодирования. декодировать ()
Метод по умолчанию принимает схему кодирования как « » UTF-8 «Когда аргументы кодирования не даны.
Таким образом, вы можете использовать декодировать ()
Способ декодирования или преобразования объекта « Байты
«Тип для ‘ ул ...| ' тип.
with open("scores.txt", "rb") as p: lines = [x.decode() for x in p.readlines()] # applying decode() for line in lines: string = line.split('-') # no exception raised because line is of 'str' type if 'Ravi' in string[0]: print('Marks obtained by Ravi:', string[1].strip())
Выход:
Marks obtained by Ravi: 65
🖊️ Решение 4: использование метода кодирования ()
Так же, как декодировать ()
Метод, мы можем использовать кодировать ()
Способ исправления такой же проблемы.
with open("scores.txt", "rb") as p: lines = p.readlines() for line in lines: string = line.split('-'.encode()) # encode converts 'str' to 'bytes' if 'Ravi'.encode() in string[0]: print('Marks obtained by Ravi:', string[1].strip())
Выход:
Marks obtained by Ravi: b'65'
Рекомендуемая статья: Ошибка кодирования Unicode Python
🖊️ Решение 5: использование байтов () Метод
Байты () Это метод в Python, который можно использовать для преобразования заданной строки на « Байты
‘ тип. Вам необходимо предоставить преобразованию строки AS Источник и кодирование который в этом случае « » UTF-8 «Как аргументы методу.
Давайте применим Байты ()
Способ решить нашу проблему.
with open("scores.txt", "rb") as p: lines = p.readlines() for line in lines: string = line.split(bytes('-', 'utf-8')) # converts str to bytes if bytes('Ravi', 'utf-8') in string[0]: print('Marks obtained by Ravi:', string[1].strip())
Выход:
Marks obtained by Ravi: b'65'
❖ Примечание: UTF-8. Это байтовое кодирование, используемое для кодирования символов Unicode.
🖊️ Решение 6: Использование метода понимания списка и STR ()
Еще один обходной путь, чтобы решить нашу проблему – использовать str ()
Метод в понимании списка. Это позволяет вам попечить Байты объект к ул …| тип.
with open("scores.txt", "rb") as p: lines = [str(x) for x in p.readlines()] # using str() to typecast bytes to str for line in lines: my_string = line.split('-') if 'Ravi' in my_string[0]: print('Marks obtained by Ravi:', my_string[1].strip(" '"))
Выход :
Marks obtained by Ravi: 65
Заключение
Давайте теперь вспомним основные моменты, обсуждаемые в этом руководстве:
- Что такое Типерр в Python?
- Что такое TypeError: нужный байт объект, а не «STR» ?
- Как исправить TypeError: нужный байт объект, а не «STR» ?
Пожалуйста, Подписаться и Оставайтесь настроиться Для более интересных дискуссий в будущем. Счастливое кодирование! 😃
Авторы : 👨🎓 Шубхам Сайон 👨🎓 Anirban Chatterjee
- Вы хотите быстро освоить самые популярные Python IDE?
- Этот курс приведет вас от новичка к эксперту в Пычарме в ~ 90 минут.
- Для любого разработчика программного обеспечения имеет решающее значение для освоения IDE хорошо, писать, тестировать и отлаживать высококачественный код с небольшим усилием.
Присоединяйтесь к Pycharm MasterClass Сейчас и мастер Pycharm на завтра!
Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.
Вы можете связаться со мной @:
Оригинал: “https://blog.finxter.com/solved-typeerror-a-bytes-like-object-is-required-not-str/”