Python для новичковКоллекцииСписок: создание, индексы и срезы

Список: создание, индексы и срезы

Уроки курсаСписок: создание, индексы и срезы

IndexError: выход за пределы допустимых индексов

Индексы работают только в пределах списка. Для списка из n элементов допустимый диапазон — от 0 до n-1 для положительных индексов и от -n до -1 для отрицательных. Как только выходишь за эту границу, Python бросает IndexError: list index out of range.

Вот как это выглядит:

colours = ['красный', 'зелёный', 'синий']  # 3 элемента, индексы 0..2 и -3..-1

print(colours[3])   # IndexError: list index out of range
print(colours[-4])  # IndexError: list index out of range

Ошибка возникает в момент обращения — Python даже не пытается вернуть значение, сразу останавливает выполнение.

Чаще всего IndexError появляется в двух ситуациях.

Первая — классическая ошибка на единицу: человек думает «список из трёх элементов, значит последний на позиции 3», но последний на позиции 2. Нумерация начинается с нуля, поэтому последний элемент всегда n-1, а не n.

Вторая — обращение к элементу пустого списка:

empty = []
print(empty[0])  # IndexError: list index out of range

У пустого списка вообще нет допустимых индексов, любое обращение по индексу упадёт.

Как проверить, что индекс в пределах? Самый прямолинейный способ — сравнить с длиной списка перед обращением:

colours = ['красный', 'зелёный', 'синий']
i = 3

if i < len(colours):
    print(colours[i])
else:
    print('Индекс за пределами списка')

Здесь len(colours) возвращает 3, и условие 3 < 3 — ложное, поэтому обращения к несуществующему элементу не происходит.

Есть и отдельная точка внимания для отрицательных индексов: граница с другой стороны. Для списка из n элементов минимальный допустимый отрицательный индекс — -n. Всё, что меньше (например, -4 для трёхэлементного списка), тоже даёт IndexError.

Если видишь эту ошибку в коде — первым делом смотри на длину списка в момент обращения и на то, какой именно индекс использован. Чаще всего причина там.