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

Игра от здесь.

Что вызывает эту ошибку?

Ответ 1

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

Ответ 2

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

Ответ 3

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

from past.builtins import xrange

Ответ 4

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

Ответ 5

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

Ответ 6

замещать

Python 2 xrange для

range Python 3

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