← Все вопросы

IndexError: list index out of range — как починить?

Задан 2 месяца назад1.4к просмотров4 ответа
18

Обращаюсь к элементу списка и падает IndexError: list index out of range. В каком месте искать причину?

4 ответа

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

Ошибка значит: ты просишь элемент по индексу, которого в списке нет. В списке из 3 элементов индексы 0, 1, 2 — а lst[3] уже выход за границу.

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

lst = [10, 20, 30]
lst[3]            # нет такого индекса
lst[len(lst)]     # классика: len == 3, а последний индекс 2
for i in range(len(lst)+1):  # +1 лишний
    print(lst[i])

Чинить: использовать range(len(lst)) без +1, последний элемент брать как lst[-1], а если список может быть пустым — проверять if lst: перед обращением. И почти всегда лучше итерироваться прямо по элементам: for x in lst: вместо возни с индексами.

Михаил Виноградов было +1 в range, спасибо! · 2 месяца назад
6

Скорее всего идёшь по индексам и где-то перебрал длину. Покажи строку, на которой падает — там и [i] за границей. Часто помогает просто for x in lst:.

4

Список пустой, а ты лезешь в [0].

-5

Оберни в try/except и пропускай, дел-то.

Евгений Смирнов так баг же замаскируешь, а не починишь — лучше понять, почему индекс вылазит · 1 месяц назад

Ваш ответ

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