NameError:全局名称'xrange'未在Python 3中定义

Pip*_*Pip 253 python range xrange python-3.x runtimeexception

我在运行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
Run Code Online (Sandbox Code Playgroud)

游戏来自这里.

是什么导致这个错误?

Mar*_*ers 495

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

用Python 2运行游戏.不要试图将它移植,除非你知道自己在做什么,很可能会出现超越更多的问题xrange()range().

对于记录,您所看到的不是语法错误,而是运行时异常.


如果您确实知道自己在做什么并且正在积极地使Python 2代码库与Python 3兼容,那么您可以通过将全局名称添加到模块作为别名来桥接代码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(...))
Run Code Online (Sandbox Code Playgroud)

或者在代码库中替换xrange(...)with的所有用法,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(...).
Run Code Online (Sandbox Code Playgroud)

后者更适用于那些希望长期只能兼容Python 3的代码库,只要有可能就更容易使用Python 3语法.

  • 感谢您注意语法错误和运行时异常之间的区别.学到了新东西! (7认同)

小智 15

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

  • 正如在接受的答案中所说,不要这样做,可能会有其他问题.只需在python 2中运行该代码即可. (6认同)
  • @Frost Xu ...请考虑Robin Fourcade的评论,并删除您的答案。它是面向初学者的IDE,您不想开始深入调试,而只了解python 2/3的更改。您的时间有点腰。 (2认同)

小智 12

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


小智 8

我加入这个解决进口问题的
更多信息

from past.builtins import xrange
Run Code Online (Sandbox Code Playgroud)

  • -------------------------------------------------- ------------------------- ModuleNotFoundError Traceback (最近一次调用最后一次) &lt;ipython-input-21-bcd3600b3604&gt; in &lt;module&gt;() -- --&gt; 1 from past.builtins import xrange 2 for i in xrange(10): 3 print(i) ModuleNotFoundError: 没有名为“past”的模块 (2认同)

Har*_*_pb 5

代替

Python 2xrange

蟒蛇3range

休息都一样。