Что означает ошибка 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])

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

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

Художник:

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

Корректор:

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

Вёрстка:

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

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
Uncaught SyntaxError: Unexpected token — что это означает?
Uncaught SyntaxError: Unexpected token — что это означает?

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

medium
Uncaught SyntaxError: Unexpected end of input — что это значит?
Uncaught SyntaxError: Unexpected end of input — что это значит?

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

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

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

medium
Метод Math.random() в JavaScript
Метод Math.random() в JavaScript

На самом деле не совсем случайных

easy
Как работает быстрая сортировка
Как работает быстрая сортировка

Ей уже 60 лет, но она до сих пор работает быстро

medium
Сделай сам: менеджер шаблонных ответов на любые письма
Сделай сам: менеджер шаблонных ответов на любые письма

Отправляем текст в буфер обмена одним кликом.

easy
ООП: атрибуты и методы
ООП: атрибуты и методы

Два главных слова любого программиста в ООП. Знай их, люби их, говори правильно.

easy
Что означает ошибка TypeError: «x» is not a function
Что означает ошибка TypeError: «x» is not a function

Это когда мы вызываем функцию, которой нет

easy
Подключаем логгер к проектам на JavaScript
Подключаем логгер к проектам на JavaScript

Следим за каждым шагом программы

medium
easy