Что означает ошибка TypeError: ‘list’ object cannot be interpreted as an integer

Неочевидная ошибка при организации цикла в Python.

Что означает ошибка TypeError: ‘list’ object cannot be interpreted as an integer

Ситуация: мы пишем на Python программу для ветеринарной клиники, и у нас есть список животных, которых мы лечим:

animals = [‘собака’, ‘кошка’, ‘попугай’, ‘хомяк’, ‘морская свинка’]

Нам нужно вывести список всех этих животных на экран, поэтому будем использовать цикл. Мы помним, что для организации циклов в питоне используется команда range(), которая берёт диапазон и перебирает его по одному элементу, поэтому пишем простой цикл:

# объявляем список животных, которых мы лечим в ветклинике
animals = ['собака', 'кошка', 'попугай', 'хомяк', 'морская свинка']

# перебираем все элементы списка
for i in range(animals):
    # и выводим их по одному на экран
    print(animals[i])

Но при запуске программа останавливается и выводит ошибку:

❌ TypeError: ‘list’ object cannot be interpreted as an integer

Странно, мы же всё сделали по правилам, почему так?

Что это значит: команда range() работает с диапазонами, которые явно представлены в числовом виде, например range(5). А у нас вместо этого стоит список со строковыми значениями. Python не знает, как это обработать в виде чисел, поэтому выдаёт ошибку.

Когда встречается: когда в диапазоне мы указываем сам список или массив, вместо того чтобы указать количество элементов в нём.

Как исправить ошибку TypeError: ‘list’ object cannot be interpreted as an integer

Если вы хотите организовать цикл, в котором нужно перебрать все элементы списка или строки, используйте дополнительно команду len(). Она посчитает количество элементов в вашей переменной и вернёт числовое значение, которое и будет использоваться в цикле:

# объявляем список животных, которых мы лечим в ветклинике
animals = ['собака', 'кошка', 'попугай', 'хомяк', 'морская свинка']

# получаем длину списка и перебираем все его элементы
for i in range(len(animals)):
    # и выводим их по одному на экран
    print(animals[i])

Практика

Попробуйте выяснить самостоятельно, есть ли здесь фрагмент кода, который работает без ошибок:

lst = [3,5,7,9,2,4,6,8]

for i in range(lst):
    print(lst[i])
lst = (3,5,7,9,2,4,6,8)

for i in range(lst):
    print(lst[i])
lst = (3)

for i in range(lst):
    print(lst[i])

Текст и иллюстрации:

Михаил Полянин

Художник:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Через год — лучше работа, выше зарплата
В «Яндекс Практикуме» становятся разработчиками с нуля. Выберите язык — веб, Python, Java, C++ — и учитесь. Джуны зарабатывают от 80 000 ₽, мидлы — от 150 000 ₽. Дальше — программы трудоустройства и компенсация, если пойдёте в Яндекс.
Через год — лучше работа, выше зарплата Через год — лучше работа, выше зарплата Через год — лучше работа, выше зарплата Через год — лучше работа, выше зарплата
Вам может быть интересно
Uncaught SyntaxError: Unexpected end of input — что это значит?
Uncaught SyntaxError: Unexpected end of input — что это значит?

Скорее всего, вы забыли закрыть скобки при объявлении функции.

easy
Uncaught SyntaxError: Unexpected identifier — что это означает?
Uncaught SyntaxError: Unexpected identifier — что это означает?

Вредная ошибка, которую легко исправить.

medium
Uncaught SyntaxError: Unexpected token — что это означает?
Uncaught SyntaxError: Unexpected token — что это означает?

Самая популярная ошибка у новичков.

medium
Проводим эксперимент Бюффона со спичками в браузере
Проводим эксперимент Бюффона со спичками в браузере

Несложная визуализация красивого метода

easy
Три ИТ-проекта из России от читателей «Кода»
Три ИТ-проекта из России от читателей «Кода»

Время отечественного пиара.

Функция range() в Python
Функция range() в Python

Создаём любые последовательности чисел одним взмахом руки

easy
Подключаем к сайту орфокорректор. Орфонейрокорректор!
Подключаем к сайту орфокорректор. Орфонейрокорректор!

Пишите как угодно — нейронка никому не расскажет.

hard
Делаем сами себе игру для Android
Делаем сами себе игру для Android

Превращаем веб-игру в офлайн-приложуху

medium
Учим нейросеть узнавать людей
Учим нейросеть узнавать людей

В пропускных системах всё работает именно так

medium
easy