2013-06-19 2 views
133

Я получаю сообщение об ошибке при запуске программы Python:NameError: глобальное имя «xrange» не определен в Python 3

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.

В чем причина этой ошибки?

ответ

263

Вы пытаетесь запустить Python 2 кодовую с Python 3. xrange() был переименован в range() в Python 3.

Запуск игры с Python 2 вместо. Не пытайтесь портировать его, если вы не знаете, что делаете, скорее всего, будет больше проблем за пределами xrange() против range().

Для записи то, что вы видите, это не синтаксическая ошибка, а исключение среды выполнения.

+4

Спасибо, что заметили разницу между синтаксической ошибкой и исключением времени выполнения. Узнал что-то новое! – Pithikos

+3

Вы бы предложили 'try: xrange, кроме NameError: xrange = range', чтобы избежать такого исключения во время выполнения? Или есть более чистая защитная альтернатива? – Tathagata

+1

@ Татагата: это то, что я использую; уловить 'NameError'. –

0

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

+0

Этот пакет будет использоваться для получения функций более новой версии для старой версии python. Не так. – mcsim

+0

Благодаря вашему направлению. –

+0

Что такое 'past.builtings.range', просто устанавливается' xrange' как ссылка на 'range'. Это полезно при создании многоугольной кодовой базы Python 2/3, но не подходит для существующего проекта, который предназначен для работы только с Python 2. –

1

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

+3

Как сказано в принятом ответе, не делайте этого, скорее всего, будут другие проблемы. Просто запустите этот код в python 2. –

+1

@Frost Xu ... пожалуйста, рассмотрите Робин Фуркад свой комментарий и удалите свой ответ. Его IDE для новичков, и вы не хотите начинать с погружения глубоко в отладку и исключительно узнавать о изменениях python 2/3. Какая-то талия твоего времени. – ZF007

0

Даже в python3.5.x, xrange() не определен. Вместо этого лучше использовать range().

 Смежные вопросы

  • Нет связанных вопросов^_^