web-dev-qa-db-ja.com

NameError:グローバル名 'xrange'はPython 3では定義されていません

私は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

ゲームは ここから です。

このエラーの原因は何ですか?

215
Pip

Python 3でPython 2コードベースを実行しようとしています。Python3では、 xrange()range() に変更されました。

代わりにPython 2でゲームを始めてください。自分が何をしているのか分からない限り、移植しようとしないでください。おそらく、xrange()range()以外にももっと問題があるでしょう。

レコードに関して、見ているのは構文エラーではなく実行時例外です。


自分のしていることがわかっていて、Python 2コードベースをPython 3と互換性のある形で積極的に作成している場合は、グローバル名をrangeのエイリアスとして自分のモジュールに追加してコードをブリッジできます。 (Python 3でまだリストオブジェクトが得られるようにするには、 may をPython 2コードベースで使用している既存の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(...)に置き換えてから、別のシムを使用して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互換の only を目指したいコードベースには後者が望ましいです。可能であればPython 3構文を使うほうが簡単です。

429
Martijn Pieters

あなたのコードにxrange=rangeを追加してください。

10
Frost Xu

python 2.xでは、xrangeはジェネレーターを返すために使用され、whilerangeはリストを返すために使用されます。 python 3.xでは、xrangeが削除され、rangepython 2.xのxrangeのようなジェネレーターを返します。したがって、python 3.xでは、xrangeではなくrangeを使用する必要があります。

1
Ahmad Farhan

このインポートを追加して問題を解決しました
詳細 情報

from past.builtins import xrange
1

この問題を解決する別の方法があります。pipinstall futureなど、futureという名前のパッケージをダウンロードできます。そして、.pyファイルに "from.ast.builtins import xrange"と入力してください。あなたのファイルにたくさんのxrangeがある状況のためです。

0
Not Genius

交換する

Python 2からxrange

Python 3 range

すべて同じように休む。

0
Harry_pb