NameError: глобальное имя 'xrange' не определено в Python 3

Я получаю сообщение об ошибке при запуске программы на 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 ответа

Решение

Вы пытаетесь запустить кодовую базу Python 2 с Python 3. 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(...))

или заменить все виды использования 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, когда это возможно.

Добавлять xrange=range в вашем коде:) Это работает для меня.

Я решил проблему, добавив этот импорт
больше информации

from past.builtins import xrange

В python 2.x xrange используется для возврата генератора, а range используется для возврата списка. В python 3.x xrange был удален, и range возвращает генератор точно так же, как xrange в python 2.x. Следовательно, в python 3.x вам нужно использовать диапазон, а не xrange.

Замещать

Python 2 xrange в

Python 3 range

Отдыхай все же.

Я согласен с последним ответом. Но есть и другой способ решения этой проблемы. Вы можете скачать пакет с именем future, например, pip install future.And, в свой файл.py введите это "from past.builtins import xrange".Этот метод для ситуации, когда в вашем файле много xranges.

Другие вопросы по тегам