ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Как исправить ошибку NameError с 'xrange' в Python 3

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

В Python 3 функция xrange больше не существует. Вместо неё следует использовать функцию range. Теперь она эффективна в плане использования памяти, как и её прежний аналог!

Python
Скопировать код
# Добро пожаловать в мир Python 3!
for i in range(5):
    print(i)

Простое замещение xrange на range обеспечит совместимость вашего кода с Python 3.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Разбираемся в изменениях

При переходе с Python 2 на Python 3 необходимо учесть не только замену xrange на range.

Было возможно в Python 2 обойтись без этого изменения, используя следующий небольшой трюк:

Python
Скопировать код
try:
    range = xrange  # Python 2
except NameError:
    pass  # Python 3

Такой подход позволит вашей программе работать как на Python 2, так и на Python 3.

Избегаем потенциальных проблем

Поняв, что такое xrange, стоит помнить и о других изменениях в Python 3:

  • Команда print требует использования скобок.
  • Правила выполнения операций деления были изменены.
  • Изменилась обработка строк в Unicode, здесь требуется новый подход.
  • Библиотеки и модули претерпели значительные обновления и изменения.

Визуализация

Посмотрим, как xrange превратился в range в истории Python:

В Python 2 (⏳): **xrange(1, 10)**
# Производится вычисление чисел "на лету", без лишнего занимания памяти!

В Python 3 (🕰️): **range(1, 10)**
# Наследовал все лучшие качества `xrange`, став ещё эффективнее.

Псевдоним range = xrange обеспечивает обратную совместимость:

Python 2 **xrange** → Python 3 **range**

Пришло время перейти на Python 3 и воспользоваться его преимуществами:

Python
Скопировать код
for i in range(1, 10):
    print(i)

Добро пожаловать в мир Python 3!

Марафон перехода

Переход на Python 3 требует учета множества деталей:

Обработка текста и данных

В Python 3 строго разделены типы str и bytes, что важно для корректной работы с текстовыми и бинарными данными.

Методы работы со словарями

Теперь .keys(), .values() и .items() возвращают view-объекты. Для преобразования к списку используйте конструкцию:

Python
Скопировать код
keys_list = list(my_dict.keys())

Обработка исключений

В Python 3 следует использовать скобки при определении кортежей исключений:

Python
Скопировать код
try:
except (ExceptionType1, ExceptionType2) as e:

Синтаксические изменения

Среди прочих изменений в Python 2 и Python 3 можно выделить изменения в list comprehensions, делении и распаковке аргументов.

Полезные материалы

  1. Что нового в Python 3.0
  2. 2to3 – Автоматический переход с Python 2 на Python 3
  3. NameError: global name 'xrange' is not defined in Python 3
  4. Встроенные типы в Python
  5. Перенос кода на Python 3
  6. Функция range() в Python
  7. Циклы for в Python