Как безопасно работать со словарями в Python и избежать KeyError
Словарь (или dict) в Python, одна из базовых и очень часто используемых структур, с которой мы обычно взаимодействуем также часто, как и с любимой кружечкой, из которой пьем кофе по утрам. :)
Мы используем их повсеместно: для работы с данными из API, хранения конфигураций и многого другого. Однако работа с отсутствующими ключами в словаре неожиданно может привести к исключению KeyError
. В этой статье разберём, как безопасно извлекать значения из словаря, чтобы избежать подобных ошибок.
Обычно мы получаем значение по ключу через квадратные скобки, например так:
my_dict = {"key_1": "value_1", "key_2": "value_2"} print(my_dict["key_1"]) >>> value_1
Вопросов к этому способу нет, все работает как часы и мы всегда получаем ровно то что нам нужно.
Но что, если мы работаем с словарями, полученными из внешних источников, например, http запросов, и какое либо поле является опциональным, а нам в коде надо в зависимости от этого прописать какое-то условие? Мы можем поступить ровно также, используя квадратные скобки для сравнения значений:
if new_dict["key"] == "value": print("ok!") else: print("no!")
И это будет работать ровно до того момента, пока эта пара ключ-значение есть внутри словаря. Если же ключ не найдется, мы получим исключение KeyError
:
new_dict = {"another_key": "another_value"} if new_dict["key"] == "value": print("ok!") else: print("no!") >>> KeyError: 'key'
Чтобы этого избежать, можно использовать встроенный метод словаря get()
:
new_dict = {"another_key": "another_value"} # Проверяем ключ безопасно с помощью get() if new_dict.get("key") == "value": print("ok!") else: print("no!") >>> no!
Также можно просто проверить присутствие ключа в словаре, и в зависимости от этого уже выполнять какие-либо действия:
new_dict = {"another_key": "another_value"} if new_dict.get("key"): ...
Здесь мы просто проверяем объект на наличие.
По умолчанию для не найденных ключей метод get()
подставляет значение `None
.
Вместо None
можно подставить любое необходимое значение:
new_dict = {"another_key": "another_value"} # Используем значение по умолчанию для отсутствующего ключа print(new_dict.get("key", "default_value")) >>> default_value
Методы, такие как get()
, делают работу со словарями в Python более безопасной. Это особенно важно при работе с данными из внешних источников, где структура словаря может быть непредсказуемой. Используя эти подходы, вы не только избежите ошибок, но и сделаете ваш код более читаемым и устойчивым к неожиданным данным.