Ошибка python3 ord () ожидаемая строка длины 1. python2.7 в порядке

У меня возникла ошибка при использовании приведенных ниже кодов 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))
связанный пост
Paul Rooney 16.08.2018 06:56

В Python 3 unhexlify возвращает строку bytes. Таким образом, вам не нужен ord, вы можете просто перебирать байты, чтобы получить целые числа, или передать его list(). Фактически, вам даже не нужен unhexlify в последних версиях, у bytes есть конструктор, который принимает шестнадцатеричный формат.

PM 2Ring 16.08.2018 06:59

@Павел. Поскольку принятый ответ на сообщение, которое вы связали, может служить дословно ответом на этот вопрос, я закрыл его как дубликат.

Mad Physicist 16.08.2018 06:59

Кстати, [x for x in b] - это медленный способ сделать list(b).

PM 2Ring 16.08.2018 07:09

@ PM2Ring Спасибо! Я добавил в свой вопрос «обновление 2», чтобы избежать недоразумений.

zono 16.08.2018 07:16

Без проблем. Но для кода Python 3 вы должны использовать bytes.fromhex(h) вместо binascii.unhexlify(h). Это немного эффективнее, так как это встроенный метод класса bytes.

PM 2Ring 17.08.2018 12:48
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
64
0

Другие вопросы по теме