python - 在 python 中记录异常消息的正确方法
问题描述
在 Python 中记录异常的最正确方法是什么?
有些人 log just e
,另一个 logs 属性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
库,也许从那一刻起发生了一些变化。
PS我知道如何获得追溯和任何其他相关信息。这里的问题应该是记录异常和错误的一般规则。
解决方案
首先,第2和第 4解决方案不起作用,因为异常没有任何消息。
然后1和3给出相同的结果:
division by zero
这些更面向用户(但并未真正使用此示例)。
最后,5显示:
ZeroDivisionError('division by zero')
它更面向开发人员,例如,如果你想调试代码,但在这种情况下,你应该允许 Python 自己显示错误,这样它会更加明确。
希望我回答了你的问题!
推荐阅读
- javascript - 在codeIgniter中使用单表动态下拉
- swift - RxSwift 错误处理订阅
- oracle - 如何在另一个模式上授予创建外键?
- mdx - AdomdDataReader 是否适用于没有列的查询?
- javascript - 如何使用“toLowerCase();” 在java脚本中
- c++ - CMakeTextFile.txt 用于 Librealsense(旧版)和 GLFW3
- c# - iTextSharp 图像未在 c# 的 aws lambda 中显示
- javascript - 用监听器更新谷歌地图标记图标
- r - 模拟超出内存
- javascript - Angular - 可观察的检查值是否存在