NameError: глобальное имя 'unicode' не определено - в Python 3
Я пытаюсь использовать пакет Python под названием bidi. В модуле этого пакета (algorithm.py) есть некоторые строки, которые дают мне ошибку, хотя это часть пакета.
Вот строки:
# utf-8 ? we need unicode
if isinstance(unicode_or_str, unicode):
text = unicode_or_str
decoded = False
else:
text = unicode_or_str.decode(encoding)
decoded = True
и вот сообщение об ошибке:
Traceback (most recent call last):
File "<pyshell#25>", line 1, in <module>
bidi_text = get_display(reshaped_text)
File "C:\Python33\lib\site-packages\python_bidi-0.3.4-py3.3.egg\bidi\algorithm.py", line 602, in get_display
if isinstance(unicode_or_str, unicode):
NameError: global name 'unicode' is not defined
Как мне переписать эту часть кода, чтобы он работал в Python3?
Кроме того, если кто-либо использовал пакет bidi с Python 3, пожалуйста, дайте мне знать, если они нашли похожие проблемы или нет. Я ценю вашу помощь.
Ответы
Ответ 1
Python 3 переименовал тип unicode
в str
, старый str
тип был заменен на bytes
.
if isinstance(unicode_or_str, str):
text = unicode_or_str
decoded = False
else:
text = unicode_or_str.decode(encoding)
decoded = True
Для получения более подробной информации вы можете прочитать Python 3 портирование HOWTO. Существует также Lennart Regebro Портирование на Python 3: подробное руководство, бесплатно онлайн.
И последнее, но не менее важное: вы можете просто попытаться использовать инструмент 2to3
, чтобы увидеть, как это переводит код для вас.
Ответ 2
Вы можете использовать библиотеку six для поддержки как Python 2, так и 3:
import six
if isinstance(value, six.string_types):
handle_string(value)