Что означает ошибка KeyError

Что означает ошибка KeyError

Это значит, что используется несуществующий ключ словаря

Ситуация: мы пишем программу для зоопарка, в которой учитывается всё — имена, возраст животных, какой они породы и так далее. Чтобы это хранить, мы используем словари. Словарь состоит из пар «ключ — значение». И вот мы подходим к интерактивному фрагменту, когда программа сообщает пользователю, как зовут любимую лошадь в зоопарке:

names = {'кошка': 'Кузя', 'собака': 'Жук', 'мышь': 'Рататуй', 'конь': 'Спирит'}
# дальше идёт остальной код
# который важен для работы программы
# … 
# и вот мы возвращаемся к словарю
print('Нашу любимую лошадь зовут ' + names['лошадь'])

Но при запуске код почему-то выдаёт такую ошибку:

❌ KeyError: 'лошадь'

Что это значит: питон взял наш словарь с именами не смог найти в нём ключ «лошадь». А раз что-то не получается сделать, интерпретатор сразу выводит ошибку и сообщает, что проблема в ключе.

Когда встречается: когда мы используем ключ, которого нет в словаре. 

Что делать с ошибкой KeyError

Эта ошибка случается по двум причинам:

  1. Мы используем неправильный ключ, которого нет в словаре.
  2. Мы перепутали словари и пытаемся использовать ключ от одного словаря в другом.

В обоих случаях для исправления достаточно посмотреть, какие ключи лежат в нужном нам словаре, и использовать именно их. 

В нашем коде ошибка такая: у нас есть ключ «конь», но нет ключа «лошадь». Так как править ключ в словаре — это неверный подход (потому что словарь может использоваться и в других местах), нам нужно заменить в команде вывода ключ на верный:

names = {'кошка': 'Кузя', 'собака': 'Жук', 'мышь': 'Рататуй', 'конь': 'Спирит'}
# дальше идёт остальной код
# который тоже важен для работы программы
# … 
# и вот мы возвращаемся к словарю
print('Нашу любимую лошадь зовут ' + names['конь'])

Текст:

Михаил Полянин

Редактор:

Максим Ильяхов

Художник:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Алина Грызлова

Любишь Python? Зарабатывай на нём!
Изучите самый модный язык программирования и станьте крутым бэкенд-разработчиком. Старт — бесплатно.
Попробовать
Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём!
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
Что означает ошибка TypeError: something() takes 0 positional arguments but 1 was given
Что означает ошибка TypeError: something() takes 0 positional arguments but 1 was given

Это когда аргументы появляются там, где их быть не должно

easy
Что означает ошибка SyntaxError: missing : after property id
Что означает ошибка SyntaxError: missing : after property id

Используйте двоеточие, если хотите обратиться к свойству объекта.

easy
Сделай сам: менеджер шаблонных ответов на любые письма
Сделай сам: менеджер шаблонных ответов на любые письма

Отправляем текст в буфер обмена одним кликом.

easy
Моделируем игру в рулетку на Python
Моделируем игру в рулетку на Python

И строим наглядные графики.

easy
Задача про вёрстку баннера
Задача про вёрстку баннера

Для тех, кто любит конкурсы разработчиков.

hard
Подсвечиваем манипуляции и пропаганду на любом сайте
Подсвечиваем манипуляции и пропаганду на любом сайте

Береги свой ум.

easy
Делаем свой планировщик задач

Bootstrap + TodoList = Trello

hard
Как добавить плавающий блок на страницу
Как добавить плавающий блок на страницу

Иногда это и правда нужно.

easy
Что означает ошибка ReferenceError: Invalid left-hand side in assignment
Что означает ошибка ReferenceError: Invalid left-hand side in assignment

Скорее всего, вы используете оператор присваивания вместо сравнения.

easy
Как запустить стартап и не разориться
Как запустить стартап и не разориться

Всё дело в правильных расчётах на старте.

easy
easy