BidiというPythonパッケージを使用しようとしています。このパッケージのモジュール(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で動作するように、コードのこの部分をどのように書き直すべきですか?また、Python 3でbidiパッケージを使用したことがある場合は、同様の問題が見つかったかどうかを教えてください。私はあなたの助けに感謝します。
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 porting HOWTO をお読みください。 Lennart Regebroの Porting to Python 3:An in-depth guide もあり、無料のオンラインです。
最後になりましたが、 2to3
tool を使用して、コードがどのように変換されるかを確認してみてください。
six ライブラリを使用して、Python 2と3の両方をサポートできます。
import six
if isinstance(value, six.string_types):
handle_string(value)
スクリプトをpython2および3で動作させ続ける必要がある場合、これは誰かを助けるかもしれません
import sys
if sys.version_info[0] >= 3:
unicode = str
そして、例えばちょうどすることができます
foo = unicode.lower(foo)
Python 3を使用していることを願っています。StrはデフォルトでUnicodeです。したがって、Unicode
関数をString Str
関数に置き換えてください。
if isinstance(unicode_or_str, str): ##Replaces with str
text = unicode_or_str
decoded = False