NameError: el nombre global ‘unicode’ no está definido – en Python 3

Estoy tratando de usar un paquete de Python llamado bidi. En un módulo de este paquete (algorithm.py) hay algunas líneas que me dan un error, aunque es parte del paquete.

Aquí están las líneas:

# 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 

y aquí está el mensaje de error:

 Traceback (most recent call last): File "", line 1, in  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 

¿Cómo debo volver a escribir esta parte del código para que funcione en Python3? Además, si alguien ha utilizado el paquete bidi con Python 3, avíseme si han encontrado problemas similares o no. Aprecio tu ayuda.

Python 3 cambió el nombre del tipo unicode a str , el tipo str antiguo ha sido reemplazado por bytes .

 if isinstance(unicode_or_str, str): text = unicode_or_str decoded = False else: text = unicode_or_str.decode(encoding) decoded = True 

Es posible que desee leer el CÓMO de transferencia de Python 3 para obtener más detalles de este tipo. También está Porting to Python 3 de Lennart Regebro : una guía detallada , gratuita en línea.

Por último, pero no por ello menos importante, puedes intentar usar la herramienta 2to3 para ver cómo se traduce el código para ti.

Puede usar la biblioteca seis para admitir Python 2 y 3:

 import six if isinstance(value, six.string_types): handle_string(value) 

Si necesitas que el script continúe trabajando en python2 y 3 como lo hice yo, esto podría ayudar a alguien

 import sys if sys.version_info[0] >= 3: unicode = str 

y puede simplemente hacer, por ejemplo,

 foo = unicode.lower(foo) 

Espero que estés usando Python 3, Str son Unicode por defecto, así que por favor Reemplaza la función Unicode con la función String Str .

 if isinstance(unicode_or_str, str): ##Replaces with str text = unicode_or_str decoded = False