Правильный способ записи сообщений об исключениях в Python - PullRequest
1 голос
/ 08 июля 2019

Какой самый правильный способ регистрации исключений в Python?

Некоторые люди регистрируют только e, другой атрибут журнала e.message (но может отсутствовать для некоторых исключений).
Одно использование str() для захвата описания исключения, но оно не содержит тип ошибки и иногда бесполезно без этого.
На самом деле repr() вернет и тип ошибки, и описание, но это не так популярно (в проектах, которые я видел).

Еще один связанный с этим вопрос: как это влияет на службы, которые собирают и группируют ошибки / оповещения, такие как Sentry. Они также должны содержать некоторую информацию о конкретной ошибке.

Итак, снова хочу открыть это обсуждение: какой способ регистрации исключений лучше всего использовать?

def foo():
    """ Method that can raise various types of exceptions """
    1/0  # just for example

try:
    foo()
except Exception as e:
    logger.exception('Error occurred during execution: %s', e)          # 1
    logger.exception('Error occurred during execution: %s', e.message)  # 2
    logger.exception('Error occurred during execution: %s', str(e))     # 3
    logger.exception('Error occurred during execution: %s', str(e.message))  # 4
    logger.exception('Error occurred during execution: %s', repr(e))    # 5

Нашел одно старое обсуждение здесь , но он не использует библиотеку logging и, возможно, что-то изменилось с того момента.

P.S. Я знаю, как получить трассировку и любую другую связанную информацию. Вопрос здесь, что должно быть общим правилом регистрации исключений и ошибок.

1 Ответ

0 голосов
/ 08 июля 2019

Во-первых, решения 2 и 4 не работают, поскольку в исключении нет сообщений.

Затем 1 и 3 дают одинаковый результат:

division by zero

Они более ориентированы на пользователя (но на самом деле не работают с этим примером).

Наконец, 5 отображает:

ZeroDivisionError('division by zero')

Он более ориентирован на разработчика, если вы хотите отладить код, например, но в этомВ этом случае вы должны разрешить Python отображать ошибку самостоятельно, чтобы она была более явной.

Надеюсь, я ответил на ваш вопрос!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...