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