← Все вопросы
KeyError при обращении к словарю — почему ключ не найден и как исправить?
8
Беру значение из словаря по ключу d['name'], а программа падает с KeyError: 'name'. Я же добавлял этот ключ! Из-за чего возникает KeyError и как безопасно доставать значения?
2 ответа
12
✓ Принятый ответ — помог автору
KeyError значит: такого ключа в словаре нет. Имя «ненайденного» ключа Python печатает в сообщении.
d = {"имя": "Аня", "возраст": 15}
print(d["name"]) # KeyError: 'name' — ключ называется "имя", а не "name"
Частые причины:
- Опечатка или другой регистр в имени ключа (
"Name"≠"name"). - Тип ключа не совпадает: положили число
d[1], а берёте строкуd["1"]— это разные ключи. - Ключа реально ещё нет (например, словарь пустой или собирается в цикле).
Как безопасно доставать значения:
- Метод
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].
Ваш ответ
Войдите, чтобы ответить на вопрос.