NameError: グローバル名 'unicode' が定義されていません - Python 3 で質問する

NameError: グローバル名 'unicode' が定義されていません - Python 3 で質問する

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 パッケージを使用したことがある方がいらっしゃいましたら、同様の問題が見つかったかどうか教えてください。ご協力に感謝いたします。

ベストアンサー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道具コードがどのように変換されるかを確認します。

おすすめ記事