← Все вопросы

IndexError: list index out of range — что значит и как избежать?

Задан 14 месяцев назад1к просмотров2 ответа
9

Обращаюсь к элементу списка, а получаю IndexError: list index out of range. Список вроде не пустой. Почему индекс «вне диапазона» и как правильно обходить элементы, чтобы не вылетало?

2 ответа

12
✓ Принятый ответ — помог автору

IndexError: list index out of range значит: вы просите элемент по номеру, которого в списке нет. В Python индексы идут с 0, поэтому у списка из 3 элементов допустимы только индексы 0, 1, 2 — а lst[3] уже выходит за границу.

lst = [10, 20, 30]
print(lst[3])   # IndexError — последний индекс это 2

Частые причины:

  1. Путаница «длина против последнего индекса». Длина 3, но последний индекс 2. Правильно: lst[len(lst) - 1] или просто lst[-1].
  2. Цикл range(len(lst)+1) — лишняя итерация выходит за край.
  3. Обращение к пустому списку: lst[0] при lst = [].

Как избежать:

  • Перебирайте элементы напрямую, без индексов:
for x in lst:
    print(x)
  • Проверяйте длину перед доступом:
if len(lst) > i:
    print(lst[i])
  • Последний элемент берите через lst[-1].

То же касается строк и кортежей: "abc"[3] тоже даст IndexError.

5

Часто ошибка вылезает в цикле while i <= len(lst):. Здесь <= лишний: когда i == len(lst), элемента уже нет. Замените на while i < len(lst):. Этот сдвиг на единицу (ошибка «забора» / off-by-one) — причина большинства IndexError.

Ваш ответ

Войдите, чтобы ответить на вопрос.