← Все вопросы

KeyError при обращении к словарю — почему ключ не найден и как исправить?

Задан 3 месяца назад1.2к просмотров2 ответа
8

Беру значение из словаря по ключу d['name'], а программа падает с KeyError: 'name'. Я же добавлял этот ключ! Из-за чего возникает KeyError и как безопасно доставать значения?

2 ответа

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

KeyError значит: такого ключа в словаре нет. Имя «ненайденного» ключа Python печатает в сообщении.

d = {"имя": "Аня", "возраст": 15}
print(d["name"])   # KeyError: 'name' — ключ называется "имя", а не "name"

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

  1. Опечатка или другой регистр в имени ключа ("Name""name").
  2. Тип ключа не совпадает: положили число d[1], а берёте строку d["1"] — это разные ключи.
  3. Ключа реально ещё нет (например, словарь пустой или собирается в цикле).

Как безопасно доставать значения:

  • Метод get() — вернёт None или значение по умолчанию вместо ошибки:
print(d.get("name"))          # None
print(d.get("name", "нет"))  # "нет"
  • Проверка наличия ключа:
if "name" in d:
    print(d["name"])
  • Для накопления значений удобен dict.setdefault() или collections.defaultdict.

Чтобы посмотреть, какие ключи вообще есть, выведите print(d.keys()) — часто сразу видно опечатку.

4

Если вы перебираете словарь и хотите безопасно работать с каждым ключом-значением, используйте for key, value in d.items():. А для одиночного доступа золотое правило: когда не уверены, что ключ есть — берите d.get(key, значение_по_умолчанию) вместо d[key].

Ваш ответ

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