У меня возникла ошибка при использовании приведенных ниже кодов TypeError: ord() expected string of length 1, but int found, когда я использовал python3.5, тогда как python2.7 в порядке. Как я могу это исправить?
* example.py
import binascii
h = '0020701a8d401c84fb13e6baf169d59684e17abd9fa216c8cc5b9fc63d622ff8c58d'
b = binascii.unhexlify(h)
a = [ord(x) for x in b]
print(a)
* python2.7
$ python example.py
[0, 32, 112, 26, 141, 64, 28, 132, 251, 19, 230, 186, 241, 105, 213, 150, 132, 225, 122, 189, 159, 162, 22, 200, 204, 91, 159, 198, 61, 98, 47, 248, 197, 141]
* python3.5
$ python3 example.py
Traceback (most recent call last):
File "example.py", line 6, in <module>
a = [ord(x) for x in b]
File "example.py", line 6, in <listcomp>
a = [ord(x) for x in b]
TypeError: ord() expected string of length 1, but int found
обновление 1
Я удалил "ord", и все заработало.
import binascii
h = '0020701a8d401c84fb13e6baf169d59684e17abd9fa216c8cc5b9fc63d622ff8c58d'
b = binascii.unhexlify(h)
a = [x for x in b]
print(a)
обновление 2
@PM 2Ring дал мне еще одно предложение. Я использую "список (б)"
import binascii
h = '0020701a8d401c84fb13e6baf169d59684e17abd9fa216c8cc5b9fc63d622ff8c58d'
b = binascii.unhexlify(h)
print(list(b))
В Python 3 unhexlify возвращает строку bytes. Таким образом, вам не нужен ord, вы можете просто перебирать байты, чтобы получить целые числа, или передать его list(). Фактически, вам даже не нужен unhexlify в последних версиях, у bytes есть конструктор, который принимает шестнадцатеричный формат.
@Павел. Поскольку принятый ответ на сообщение, которое вы связали, может служить дословно ответом на этот вопрос, я закрыл его как дубликат.
Кстати, [x for x in b] - это медленный способ сделать list(b).
@ PM2Ring Спасибо! Я добавил в свой вопрос «обновление 2», чтобы избежать недоразумений.





