DevGang
Авторизоваться

Python: устранение ошибки - KeyError: 'key_name'

Согласно официальной документации Python 3, ошибка KeyError возникает, когда  ключ набора (словаря) не найден в наборе существующих ключей.

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

rana@Brahma: ~$ python3
Python 3.5.2 (default, Jul 10 2019, 11:58:48) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = dict()
>>> a["key1"] = "value1"
>>> print(a["key2"])
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 'key2'
>>> 

Доступ к ключам словаря:

Для доступа к ключам словаря мы используем квадратные скобки [ ].

>>> gender = dict()
>>> gender["m"] = "Male"
>>> gender["f"] = "Female"
>>> gender["m"]
'Male'
>>> 

Однако вышеуказанный способ, то есть использование квадратных скобок, имеет один недостаток. Если ключ не существует, мы получаем KeyError.

>>> gender["k"]
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 'k'
>>> 

Удаление несуществующего ключа:

>>> del gender["h"]
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 'h'
>>> 

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

- Используйте метод get()

Мы можем получить значение ключа из словаря, используя метод get. Если пара ключ-значение не существует для данного ключа в словаре, то возвращается None, иначе возвращается значение, соответствующее этому ключу. Это рекомендуемый способ.

>>> gender.get("m")
'Male'
>>> gender.get("k")
>>> 
>>> print(gender.get("k") is None)
True
>>>

Вы можете передать второй необязательный параметр в вызове get(), который является значением, возвращаемым, если ключ не существует в словаре. Значением по умолчанию этого второго параметра является None.

- проверить наличие ключа

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

gender = dict()
gender["m"] = "Male"
gender["f"] = "Female"

if "k" in gender:
  print("Key k exists in gender")
else:
  print("Key k doesn't exists in gender")

- Используйте try-exc

Если вы не используете или не хотите использовать метод get для доступа к ключам в словаре, используйте блок try-exc.

gender = dict()
gender["m"] = "Male"
gender["f"] = "Female"

try:
  value = gender["k"]
except KeyError:
  print("Key error. Do something else")
except Exception:
  print("Some other error")

- Получить все ключи и перебрать словарь

Мы можем использовать метод keys(), чтобы получить список всех ключей в словаре, а затем выполнить итерацию по этому списку и получить доступ к значениям в словаре.

gender = dict()
gender["m"] = "Male"
gender["f"] = "Female"

keys = gender.keys()

for key in keys:
  print(gender[key])

- Или вы можете напрямую перебирать словарь для пар ключ и значение, используя метод items().

gender = dict()
gender["m"] = "Male"
gender["f"] = "Female"

for item in gender.items():
  print(item[0], item[1])

Аналогично, для удаления значения ключа из словаря мы можем использовать метод pop() вместо del.

Однако, в отличие от метода get(), метод pop() выбрасывает keyError, если удаляемый ключ не существует и второй параметр не передается.

Таким образом, чтобы избежать ошибки KeyError в случае удаления ключа, мы должны передать значение по умолчанию, которое будет возвращено, если ключ не найден, в качестве второго параметра для pop()

>>> 
>>> gender.pop("m")
'Male'
>>> gender.keys()
dict_keys(['f'])
>>> gender.pop("k")
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 'k'
>>> gender.pop("k", None)
>>> 
#Python
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

Освой перспективную онлайн профессию!

Получить скидку