Próbuję użyć pakietu Pythona o nazwie bidi. W module w tym pakiecie (algorytm.py) jest kilka wierszy, które dają mi błąd, chociaż jest to część pakietu.
Oto linie:
# 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
a oto komunikat o błędzie:
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
Jak ponownie napisać tę część kodu, aby działała w Python3? Również, jeśli ktoś korzystał z pakietu bidi w Pythonie 3, daj mi znać, jeśli napotkał podobne problemy, czy nie. Doceniam twoją pomoc.
if isinstance(unicode_or_str, str)
powinno po prostu działać. Zmiana nazwy zmiennej jest opcjonalna.unicode
zastąpiony przezstr
.Jeśli potrzebujesz, aby skrypt działał na python2 i 3 tak jak ja, może to komuś pomóc
import sys if sys.version_info[0] >= 3: unicode = str
i może to zrobić na przykład
źródło
six
biblioteki do zarządzania zgodnością z Python 2/3, możesz zrobić to:if six.PY3: unicode = str
zamiastsys.version_info
rzeczy. Jest to również bardzo pomocne w zapobieganiu błędom lintera związanym z niezdefiniowaniem Unicode w Pythonie 3, bez konieczności stosowania specjalnych wyłączeń reguł lintera.Możesz użyć sześciu bibliotek do obsługi zarówno Pythona 2, jak i 3:
import six if isinstance(value, six.string_types): handle_string(value)
źródło
Mam nadzieję, że używasz Pythona 3, Str są domyślnie unicode, więc zamień
Unicode
funkcję na funkcję StringStr
.if isinstance(unicode_or_str, str): ##Replaces with str text = unicode_or_str decoded = False
źródło