Рубрики
Без рубрики

[Решено] Типеррера: нужный байт объект, а не «STR»

Решить эту систему, используя следующие методы: 1. Замена «RB» с «RT» 2. Добавление префикса ‘B’ 3. Использование декодирования () Метод 4. Использование кодирования () метода 5. BYTES () Метод 6. Появление списка и ул. Метод

Автор оригинала: 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, in 
    string=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, in 
    print(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/”