Пропустить до содержимого

Как использоватьhttps://codemdd.io/исправить KeyError?

CodeMDD.io

Python KeyError и как с ним справиться

Python KeyError - это общее исключение, с которым сталкиваются начинающие программисты. Знание причин возникновения KeyError и несколько решений для предотвращения его остановки программы - это важный шаг в улучшении навыков программирования на Python.

В конце этого руководства вы узнаете:

  • Что обычно означает Python KeyError.
  • Где еще можно встретить KeyError в стандартной библиотеке.
  • Как обработать KeyError при его возникновении.

Бесплатный бонус: Щелкните здесь, чтобы получить нашу бесплатную шпаргалку по Python, которая покажет вам основы Python 3, такие как работа с типами данных, словарями, списками и функциями Python.

Что обычно означает Python KeyError

В Python исключение KeyError возникает, когда вы пытаетесь получить доступ к ключу, который отсутствует в словаре (dict).

Официальная документация Python говорит, что KeyError возникает, когда к ключу отображения обращаются и его нет в отображении. Отображение является структурой данных, которая отображает один набор значений на другой. Самое распространенное отображение в Python - это словарь.

Python KeyError является разновидностью исключения LookupError и указывает на проблему с получением искомого ключа. Когда вы видите KeyError, это означает, что искомый ключ не найден.

В приведенном ниже примере видно, как определен словарь (ages) с возрастами трех человек. При попытке получить доступ к ключу, которого нет в словаре, возникает KeyError:

Python

>>> ages = {'Jim': 30, 'Pam': 28, 'Kevin': 33}
>>> ages['Michael']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Michael'

В этом примере попытка получить доступ к ключу 'Michael' в словаре ages приводит к возникновению KeyError. Можно заметить, что в конце сообщения об ошибке содержится следующая информация:

  • факт возникновения исключения KeyError,
  • ключ, который не удалось найти, - 'Michael'.

Предпоследняя строка сообщает, на какой строке произошло исключение. Эта информация более полезна, когда вы выполняете код Python из файла.

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

В приведенной ниже программе вы можете увидеть снова определенный словарь ages. На этот раз вам будет предложено ввести имя человека, чтобы узнать его возраст:

Python

ages.py
ages = {'Jim': 30, 'Pam': 28, 'Kevin': 33}
person = input('Get age for: ')
print(f'{person} is {ages[person]} years old.')

Этот код получит имя, которое вы введете в окне ввода и попытается получить возраст этого человека. Будет выведена информация об имени и возрасте:

Terminal window
Get age for: Jim
Jim is 30 years old.
Terminal window
Get age for: Michael
Traceback (most recent call last):
File "ages.py", line 5, in <module>
print(f'{person} is {ages[person]} years old.')
KeyError: 'Michael'

Программа попыталась получить возраст для имени 'Michael', но получила ошибку KeyError. В результатах трассировочного вывода видно, что возникло исключение KeyError, и указан ключ, который не был найден.

Где еще можно встретить KeyError в стандартной библиотеке

Помимо словарей, KeyError может возникнуть при работе с другими типами данных в стандартной библиотеке Python. Например, при работе с модулем os.environ, который предоставляет доступ к переменным окружения операционной системы, также может возникнуть KeyError при попытке получить значение переменной, которой нет в окружении.

Рассмотрим пример:

Python

import os
print(os.environ['PATH'])
print(os.environ['PYTHON_HOME'])

В данном примере мы выводим значение переменной окружения PATH и PYTHON_HOME. Если переменных с такими именами нет в окружении, то возникнет ошибка KeyError.

Terminal window
Traceback (most recent call last):
File "environment_variables.py", line 4)
print(os.environ['PYTHON_HOME'])
File "https://codemdd.io/usrhttps://codemdd.io/libhttps://codemdd.io/python3.8https://codemdd.io/os.py", line 675, in)
return self.data[key.upper()]
KeyError: 'PYTHON_HOME'

В этом случае возникает KeyError, потому что переменная окружения 'PYTHON_HOME' отсутствует.