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)