Вывод TypeError кажется задом наперед - PullRequest
1 голос
/ 29 февраля 2020

Вот фрагмент, демонстрирующий мою точку зрения:

>>> type("test0@test1")
<class 'str'>
>>> type("test0@test1".encode("utf-8"))
<class 'bytes'>
>>> "test0@test1".split('@')
['test0', 'test1']
>>> "test0@test1".encode("utf-8").split('@')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: a bytes-like object is required, not 'str'

Почему он говорит мне, что строковому оператору требуется объект, похожий на байты, когда ему явно нужна строка?

1 Ответ

4 голосов
/ 29 февраля 2020

"test0@test1".encode("utf-8") возвращает объект bytes.

bytes имеет метод split , который принимает в качестве аргумента объект типа bytes. Но вы вызываете

"test0@test1".encode("utf-8").split('@')

Итак, вы передаете строку ('@') в метод (bytes.split), для которого в качестве аргумента требуется байтовоподобный объект .

Отсюда и ошибка a bytes-like object is required, not 'str'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...