KeyError и IndexError (Python)
Коротко: В словаре отсутствует ключ (KeyError) или индекс списка лежит вне списка (IndexError).
Подробнее: Обе ошибки возникают при обращении к несуществующим элементам. Они родственны ArrayIndexOutOfBoundsException в Java.
Подробности
KeyError
age = {"Mia": 17}
print(age["Tom"]) # KeyError: 'Tom'Ключа "Tom" нет в словаре. Опечатки и регистр тоже считаются. Решения:
age.get("Tom")возвращаетNone,age.get("Tom", 0)— значение по умолчанию.- Проверьте заранее:
if "Tom" in age:. - Используйте
collections.defaultdictилиsetdefault. - С данными JSON выведите фактические ключи (
print(data.keys())).
IndexError
numbers = [10, 20, 30]
print(numbers[3]) # IndexError: list index out of rangeДопустимые индексы — от 0 до len(список) - 1. Часто: ошибка на единицу в циклах (range(len(x)+1)), пустые списки, неверный индекс после удаления элементов. Решения:
- Проверьте
if i < len(numbers):илиif numbers:для «не пусто». - Перебирайте через
for n in numbers:вместо индексов. - Отрицательные индексы считаются с конца:
numbers[-1]. try/except IndexErrorиспользуйте только там, где отсутствие ожидаемо.
Поиск причины
Прочитайте номер строки в трассировке, выведите len() или ключи перед этой строкой и проверьте, действительно ли данные выглядят так, как вы думаете (пустой ответ, другая структура, None). Отладчик или print в нужном месте экономит много времени.
См. также: ArrayIndexOutOfBoundsException, TypeError, ModuleNotFoundError