1. ホーム
  2. python

[解決済み】NameError: グローバル名 'unicode' が定義されていない - Python 3 の場合

2022-01-23 01:18:43

質問

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で動くようにするには、どのように書き直せばよいのでしょうか? また、Python3で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 移植 HOWTO のような詳細があります。また、Lennart Regebroの Python 3 への移植: 詳細なガイド オンラインで無料です。

最後になりましたが、このような場合は 2to3 ツール をクリックすると、コードがどのように変換されるかを確認できます。