Регистрация исключений Python, правильный синтаксис? - PullRequest
0 голосов
/ 14 февраля 2012

Я добавляю логирование в некоторый код Python, который работает с исключениями, в приведенном ниже примере, каков правильный синтаксис для записи подробностей исключения (например, с помощью logger.exception ()), когда происходит TypeError или AttributeError?

    try:
        ...
    except (TypeError, AttributeError):
        # want to do a logger.exception(x) here but not sure what to use for x
        ...
        raise CustomError("Unable to parse column status)

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

exception(...) - это просто удобный метод, который принимает сообщение, как и другие методы:

def exception(self, msg, *args):
    """
    Convenience method for logging an ERROR with exception information.
    """
    self.error(msg, exc_info=1, *args)

Так что вы бы просто использовали его как

logger.exception("Some error message")

и обработчик журнала автоматически добавит информацию об исключении из текущего исключения. Используйте это только в обработчике исключений (т.е. в блоке except:)!

0 голосов
/ 14 февраля 2012

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

except (TypeError, AttributeError), e:
    # e is the Exception object
    logger.exception(e)

Если вам нужно выполнить разные действия в зависимости от типа исключения, тогдавы можете поймать их отдельно:

except TypeError, e:
    logger.exception('There was a Type Error; details are %s' % e)
    # Do something, or raise another exception
except AttributeError, e:
    logger.exception('There was an Attribute Error; details are %s' % e)
    # Do something, or raise another exception

И если вам нужна дополнительная информация о контексте самого исключения, посмотрите на функцию sys.exc_info();он может получить вам трассировку и подробную информацию о том, где именно произошло исключение.

...