Как работать с Keyrror при вызовах API

#python

Вопрос:

Как я могу наилучшим образом обработать ошибку ключа в моем скрипте python ?

Мой скрипт вызывает API, который предоставляет некоторую информацию о JSON.

Информация JSON, предоставляет информацию об активах (серверах), а иногда некоторая информация не предоставляется API. Например, если имя хоста неизвестно, API не даст никакого ключа имени хоста в ответе json.

Я пытался :

 try:
   address = asset['addresses'][0]['ip']
   hostname = asset['hostNames'][0]['name']
   os = asset['os']
except KeyError as e:
   hostname = ""
 

Но если есть еще одна ошибка ключа, я изменю только переменную имени хоста.

Как я могу обрабатывать все исключения KeyError ? Должен ли я это делать, или есть лучший способ сделать это ?

 try:
    address = asset['addresses'][0]['ip']
except KeyError as e:
    address = ""
try:
    hostname = asset['hostNames'][0]['name']
except KeyError as e:
    hostname = ""
try:
    os = asset['os']
except KeyError as e:
    os = ""
 

Ответ №1:

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

 address = asset['addresses'][0].get("ip", "")
hostname = asset['addresses'][0].get("name", "")
os = asset.get("os", "")
 

Если addresses их вообще нет или индекс 0 не найден, он все равно выйдет из строя.

Чтобы облегчить это, вы можете охранять, например, с помощью

 addresses = asset.get('addresses', [])  # list of addresses, or an empty list
first_address = (addresses[0] if addresses else {})  # first address or an empty dict

address = first_address.get("ip", "")
hostname = first_address.get("name", "")
os = asset.get("os", "")