Что означает ошибка 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
Делаем свой таймер на Python
Делаем свой таймер на Python

Код — проще, возможностей — больше.

easy
Как вставить изображение в HTML
Как вставить изображение в HTML

Один привычный способ и несколько неочевидных

easy
Универсальная аналитическая машина
Универсальная аналитическая машина

Она может предсказать что угодно, если правильно её настроить.

medium
Как поклеить обои
Как поклеить обои

Поручим это машине.

easy
Асинхронный код на Python: синтаксис и особенности
Асинхронный код на Python: синтаксис и особенности

Асинхронность — это когда функции выполняются вместе, но не одновременно

hard
Что означает ошибка OverflowError: math range error
Что означает ошибка OverflowError: math range error

Это ошибка переполнения из-за математических операций

easy
easy