Какой ключ не найден при KeyError в Python?
Названия: Как определить, какой ключ вызвал ошибку KeyError при работе с JSON?
У меня возникла проблема с обработкой JSON в Python. В функции poijson2xml
я пытаюсь получить доступ к двум ключам: "FastestMan" и "FastestWoman" из переданного объекта JSON (POI_JSON
). Однако, если один из этих ключей отсутствует, возникает ошибка KeyError
.
Вот мой код:
def poijson2xml(location_node, POI_JSON):
try:
man_json = POI_JSON["FastestMan"]
woman_json = POI_JSON["FastestWoman"]
except KeyError:
# Как я могу определить, какой ключ ("FastestMan" или "FastestWoman") вызвал ошибку?
LogErrorMessage ("POIJSON2XML", "Can't find mandatory key in JSON")
Я хотел бы узнать, как можно определить, какой именно ключ спровоцировал KeyError
. Есть ли способ получить имя отсутствующего ключа и использовать его в сообщении об ошибке? Буду признателен за помощь!
2 ответ(ов)
Вы можете легко получить ключ, вызвавший исключение KeyError
, в Python. Для этого используйте конструкцию except
с использованием as
, как показано ниже:
except KeyError as e: # В Python 2 это делалось как 'KeyError, e:'
cause = e.args[0]
В результате у вас будет храниться проблемный ключ в переменной cause
.
Расширяя ваш пример кода, можно сделать следующее:
def poijson2xml(location_node, POI_JSON):
try:
man_json = POI_JSON["FastestMan"]
woman_json = POI_JSON["FastestWoman"]
except KeyError as e:
LogErrorMessage("POIJSON2XML", "Не удалось найти обязательный ключ '"
+ e.args[0] + "' в JSON")
Обратите внимание, что в Python 2 вы можете использовать e.message
, но в Python 3 это не работает, поэтому лучше избегать этого.
Похоже, вы хотите обработать данные JSON, и если вы получаете их как словарь, можно использовать метод dict.get()
, чтобы упростить это.
Вот пример кода:
def POIJSON2DOM(location_node, POI_JSON):
man_JSON = POI_JSON.get("FastestMan", 'Нет данных для самого быстрого мужчины')
woman_JSON = POI_JSON.get("FastestWoman", 'Нет данных для самой быстрой женщины')
# работайте с полученными данными по вашему усмотрению
Метод dict.get()
принимает два аргумента: первый — это ключ, который вы хотите получить, а второй — значение, которое будет возвращено, если этот ключ не существует. Это удобно для обработки значений с учетом возможных отсутствий данных.
Фиксация количества знаков после запятой с помощью f-строк
Ошибка: "'dict' объект не имеет метода 'iteritems'"
Скачать видео с YouTube с помощью Python в определённую директорию
Доступ к атрибутам на литералах работает для всех типов, кроме `int`; почему?
Преобразование байтового массива обратно в массив numpy