0

Какой ключ не найден при KeyError в Python?

13

Названия: Как определить, какой ключ вызвал ошибку 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 ответ(ов)

0

Вы можете легко получить ключ, вызвавший исключение 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 это не работает, поэтому лучше избегать этого.

0

Похоже, вы хотите обработать данные JSON, и если вы получаете их как словарь, можно использовать метод dict.get(), чтобы упростить это.

Вот пример кода:

def POIJSON2DOM(location_node, POI_JSON):
    man_JSON = POI_JSON.get("FastestMan", 'Нет данных для самого быстрого мужчины')
    woman_JSON = POI_JSON.get("FastestWoman", 'Нет данных для самой быстрой женщины')
    # работайте с полученными данными по вашему усмотрению

Метод dict.get() принимает два аргумента: первый — это ключ, который вы хотите получить, а второй — значение, которое будет возвращено, если этот ключ не существует. Это удобно для обработки значений с учетом возможных отсутствий данных.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь