#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", "")