Python プログラムを実行するとエラーが発生します:
Traceback (most recent call last):
File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 110, in <module>
File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\_sandbox.py", line 27, in __init__
File "C:\Program Files (x86)\Wing IDE 101 4.1\src\debug\tserver\class\inventory.py", line 17, in __init__
builtins.NameError: global name 'xrange' is not defined
このゲームはここ。
このエラーの原因は何ですか?
ベストアンサー1
Python 3 で Python 2 コードベースを実行しようとしています。xrange()
に改名されましたrange()
Python 3 の場合。
代わりに、Python 2 でゲームを実行してください。何をしているのかわからない場合は移植を試みないでください。おそらく、それ以上の問題が発生するでしょうxrange()
。range()
ちなみに、表示されているのは構文エラーではなく、ランタイム例外です。
自分が何をしているのかわかっていて、Python 2 コードベースを Python 3 と互換性のあるものに積極的にしている場合は、 のエイリアスとしてグローバル名をモジュールに追加することで、コードをブリッジできます。(Python 3 でもリスト オブジェクトを取得できるようにするには、Python 2 コードベースで既存の使用をで更新する必要がある場合があるrange
ことに留意してください)。range()
list(range(...))
try:
# Python 2
xrange
except NameError:
# Python 3, xrange is now named range
xrange = range
# Python 2 code that uses xrange(...) unchanged, and any
# range(...) replaced with list(range(...))
xrange(...)
または、コードベース内でのすべての使用を に置き換えてrange(...)
から、別の shim を使用して Python 3 構文を Python 2 と互換性のあるものにします。
try:
# Python 2 forward compatibility
range = xrange
except NameError:
pass
# Python 2 code transformed from range(...) -> list(range(...)) and
# xrange(...) -> range(...).
後者は、長期的にのみPython 3 互換を目指すコードベースに適しています。その場合、可能な限り Python 3 構文を使用する方が簡単です。