正确的方式记录python中的异常消息



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。我知道如何获得跟踪和任何其他相关信息。这里的问题应该是记录异常和错误的一般规则。

首先, 2 4 解决方案不起作用,因为例外没有任何消息。

然后 1 3 给出相同的结果:

division by zero

这些更面向用户(但与此示例没有真正的工作(。

最后, 5 正在显示:

ZeroDivisionError('division by zero')

例如,如果要调试代码,它更加面向开发人员,但是在这种情况下,您应该允许Python本身显示错误,因此它将更加明确。

希望我回答您的问题!