Python от 2 до 3 байт / строковая ошибка - PullRequest
8 голосов
/ 05 ноября 2010

Я пытаюсь преобразовать библиотеку Python, созданную для Python 2, в Python 3, вот код .

У меня ошибка в строке 152. В версии Py2 функция:


def write(self, data):
    self._write_buffer += data

Ошибка:

Ошибка типа: невозможно преобразовать байты объект str неявно

Я обнаружил, что должен декодировать переменную, поэтому я изменил функцию на:


def write(self, data):
    self._write_buffer += data.decode('utf8')

Это работает, но у меня есть другая ошибка в асинхронной библиотеке, которая сказала, что

(тип) должен быть байтами или буфером, а не ул

Итак, что я могу сделать?

1 Ответ

5 голосов
/ 05 ноября 2010

Вы должны четко понимать, где вы хотите байты и где вы хотите строки. Если вы просто добавите decode и encode там, где появляются ошибки, вы будете играть в whack-a-mole. В вашем случае вы пишете реализацию сокета. Сокеты работают с байтами, а не со строками. Поэтому я думаю, что ваш _write_buffer должен быть байтовым объектом, а не строкой, как у вас сейчас.

Строка 91 должна измениться на:

self._write_buffer = b''

Тогда вы можете работать оттуда, чтобы убедиться, что вы используете байты повсюду.

...