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本身显示错误,因此它将更加明确。
希望我回答您的问题!