J'essaie d'utiliser un package Python appelé bidi. Dans un module de ce paquetage (algorithm.py), certaines lignes me donnent une erreur, bien que cela fasse partie du paquetage.
Voici les lignes:
# 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
et voici le message d'erreur:
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
Comment dois-je réécrire cette partie du code pour qu'elle fonctionne en Python3? Aussi, si quelqu'un a utilisé le paquet bidi avec Python 3, veuillez me faire savoir s'il a détecté des problèmes similaires ou non. J'apprécie ton aide.
Python 3 a renommé le type unicode
en str
, l'ancien type str
a été remplacé par bytes
.
_if isinstance(unicode_or_str, str):
text = unicode_or_str
decoded = False
else:
text = unicode_or_str.decode(encoding)
decoded = True
_
Vous voudrez peut-être lire le HOWTO de portage de Python 3 pour plus de détails. Il existe également le portage de Lennart Regebro sur Python 3: un guide détaillé , gratuit en ligne.
Enfin et surtout, vous pouvez simplement essayer d'utiliser l'outil 2to3
pour voir comment cela traduit le code pour vous.
Vous pouvez utiliser la bibliothèque six pour prendre en charge à la fois Python 2 et 3:
import six
if isinstance(value, six.string_types):
handle_string(value)
Si vous avez besoin que le script continue à travailler sur python2 et 3 comme je le faisais, cela pourrait aider quelqu'un
import sys
if sys.version_info[0] >= 3:
unicode = str
et peut alors juste faire par exemple
foo = unicode.lower(foo)
J'espère que vous utilisez Python 3, Str sont unicode par défaut, veuillez donc remplacer la fonction Unicode
par la fonction String Str
.
if isinstance(unicode_or_str, str): ##Replaces with str
text = unicode_or_str
decoded = False