364

运行 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

游戏从这里开始

是什么导致了这个错误?

4

6 回答 6

708

您正在尝试使用 Python 3 运行 Python 2 代码库。在 Python 3xrange()中已重命名为range()

改为使用 Python 2 运行游戏。除非您知道自己在做什么,否则不要尝试移植它,很可能会出现更多xrange()问题range()

作为记录,您看到的不是语法错误,而是运行时异常。


如果您确实知道自己在做什么并且正在积极制作与 Python 3 兼容的 Python 2 代码库,则可以通过将全局名称添加到模块作为range. (考虑到您可能必须更新range()Python 2 代码库中的任何现有使用,list(range(...))以确保您仍然在 Python 3 中获得列表对象):

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(...)with 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 语法更容易。

于 2013-06-19T13:14:02.300 回答
25

添加xrange=range你的代码:)它对我有用。

于 2018-02-07T07:15:32.593 回答
17

我通过添加这个导入解决了这个问题
更多信息

from past.builtins import xrange
于 2019-05-13T15:48:21.510 回答
5

在 python 2.x 中,xrange用于返回生成器,而range用于返回列表。在 python 3.x 中,xrange已被删除,并且range返回一个生成器,就像python 2.x 中的xrange一样。因此,在 python 3.x 中,您需要使用 range 而不是 xrange。

于 2019-08-07T08:01:07.030 回答
2

代替

Python 2xrange

蟒蛇 3range

休息都一样。

于 2018-11-20T20:39:46.237 回答
0

我同意最后一个答案。但是还有另一种方法可以解决这个问题。你可以下载名为future的包,例如pip install future。然后在你的.py文件中输入这个“from past.builtins import xrange”。这个方法适用于您的文件中有许多 xranges 的情况。

于 2017-11-24T09:30:34.583 回答