Здравствуйте
Перевожу одну библиотеку со второго на третий питон. 2to3 исправила мне принты и другие мелочи
Проблема со строками. Во py2 строки байтовые, чем автор воспользовался по полной: все двоичные данные хранятся и обрабатываются как строки.
Поиском прошелся по строковым литералам, заменил всякие d='\x05' на d=b'\x05'. Но тут объявился новый челлендж: во втором питоне индексация байтстроки возвращает байтстроку, а в третьем питоне она возвращает число.
Размышления насколько то или иное поведение логично оставим на совести Гвидо, но факт в том, что почти вся логика библиотеки стала невалидна.
Примеры фейлов:
data = b'123'
data[0] == b'1' # fail. data[0] == 49
# При этом 🤦
(b'1' in data) == True
for i in data:
# В py2 тут будут '1', '2', '3'. В py3 - 49, 50, 51
И если превый пример я с горем пополам победил, заменив везде data[0] на data[0:1]. То что делать с циклом?
Как в цикле получить байтстроки вместо чисел? Желательно не прибегая к декодированию (chr(49).encode(), bytes([49]))