首页 文章

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

提问于
浏览
207

我在运行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 .

是什么导致这个错误?

4 回答

  • 412

    您正在尝试使用Python 3运行Python 2代码库 . 在Python 3中,xrange()已重命名为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(...) 的所有用法,然后使用不同的填充程序使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语法 .

  • 0

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

  • -1

    更换

    Python 2 xrange

    Python 3 range

    休息一下 .

  • 10

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

相关问题