名称错误:Python 3中未定义全局名称“xrange”

2021-01-26 09:56:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

游戏来自here

是什么导致了这个错误?

3条回答
网友
1楼 ·

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

from past.builtins import xrange
网友
2楼 ·

您正在尝试使用Python 3运行Python 2代码库。^{}在Python 3中被重命名为^{}

改用Python 2运行游戏。除非你知道你在做什么,否则不要尝试移植它,很可能除了xrange()range()之外还有更多的问题。

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


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

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兼容的代码基更为可取,因此只要有可能就可以更容易地使用python3语法。

网友
3楼 ·

在代码中添加xrange=range)对我有效。

相关问题