6 Избежание исключений KeyError

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

 mydict = {}
mydict['not there']
 

Traceback (последний вызов был последним): File " ", строка 1, в KeyError: «не там»

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

 value = mydict.get(key, default_value)

 

Который возвращает mydict[key] , если она существует, но в противном случае возвращает default_value . Обратите внимание , что это не добавляет key к mydict . Так что если вы хотите сохранить эту ключевую пару значений, вы должны использовать mydict.setdefault(key, default_value) , который не хранить пару ключей значения.

 mydict = {}
print(mydict)
# {}
print(mydict.get("foo", "bar"))
# bar
print(mydict)
# {}
print(mydict.setdefault("foo", "bar"))
# bar
print(mydict)
# {'foo': 'bar'}

 

Альтернативный способ справиться с проблемой - поймать исключение

 try:
    value = mydict[key]
except KeyError:
    value = default_value

 

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

 if key in mydict:
    value = mydict[key]
else:
    value = default_value

 

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

Другой вариант - использовать подкласс dict, collection.defaultdict, который имеет default_factory для создания новых записей в dict при получении new_key.