Почему это, кроме как называется? - питон - PullRequest
1 голос
/ 21 декабря 2010

У меня есть метод, который проверяет полезную нагрузку JSON на наличие ошибок декодирования JSON и KeyErrors. По какой-то причине вызывается оператор except с KeyError, но затем он показывает, что на самом деле не было KeyError, поскольку объект - None. Вот код:

    try:
        test_data = simplejson.loads(self.raw_data) # Loads the data in a dict to test for the right fields
        test_data["test"]

    except simplejson.decoder.JSONDecodeError as jsonErr:
        print 'JSON Malform Error: ', jsonErr
        pass
        return False

    except KeyError as keyErr:
        print 'JSON Validation Error: ', keyErr
        pass

Ответы [ 2 ]

1 голос
/ 21 декабря 2010

Ошибка KeyError, вероятно, увеличена на simplejson.loads, а ключ-нарушитель может действительно быть None.Недостаточно контекста, чтобы сказать больше.Если вы дадите трассировку в соответствии с запросом, это очень поможет.

0 голосов
/ 21 декабря 2010

Просмотр трассировки должен сказать вам, в каком модуле было сгенерировано исключение. Вы также можете рассмотреть возможность использования ipdb для ручного перехода назад и вперед для отладки таких проблем в будущем.Более того, вы должны наследовать от класса исключений Python, чтобы иметь больший контроль над собственным кодом, повышая и исключая.

Использование функций Python getattr и setattr также очень помогают:

Использование getattr в test_data сообщит вам, когда вызывать пользовательское исключение в случае, если возвращено значение None.

...