正确记录python

时间:2019-07-08 10:03:44

标签: python python-logging

在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

找到了一个古老的讨论here,但它没有使用logging库,从那时起也许有所改变。

P.S。我知道如何获取追溯和任何其他相关信息。这里的问题是记录异常和错误的一般规则是什么。

1 个答案:

答案 0 :(得分:0)

首先, 2 4 解决方案无法正常工作,因为没有异常消息。

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

division by zero

这些都是面向用户的(但在此示例中并不真正适用)。

最后,显示 5

ZeroDivisionError('division by zero')

例如,如果要调试代码,则它是面向开发人员的,但在这种情况下,应允许Python自行显示错误,这样才能更加明确。

希望我回答了你的问题!