我在运行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
这个游戏来自这里。
是什么导致了这个错误?
您正在尝试使用Python 3运行Python 2代码库。xrange()在Python 3中被重命名为range()。
用Python 2运行游戏。不要尝试移植它,除非你知道你在做什么,很可能会有更多的问题超出xrange()和range()。
为了记录,您看到的不是语法错误,而是运行时异常。
如果你确实知道你在做什么,并且正在积极地使Python 2代码库与Python 3兼容,你可以通过将全局名称作为range的别名添加到模块中来桥接代码。(考虑到你可能必须用list(range(…))更新Python 2代码库中任何现有的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(…)的所有用法替换为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语法更容易。
您正在尝试使用Python 3运行Python 2代码库。xrange()在Python 3中被重命名为range()。
用Python 2运行游戏。不要尝试移植它,除非你知道你在做什么,很可能会有更多的问题超出xrange()和range()。
为了记录,您看到的不是语法错误,而是运行时异常。
如果你确实知道你在做什么,并且正在积极地使Python 2代码库与Python 3兼容,你可以通过将全局名称作为range的别名添加到模块中来桥接代码。(考虑到你可能必须用list(range(…))更新Python 2代码库中任何现有的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(…)的所有用法替换为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语法更容易。