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