python 如何获取未捕获的异常和相关上下文?

2015-12-03 10:41:16 +08:00
 pc10201
python 的异常一般是用 try except 捕获,
不过这有一个矛盾的点,就是你得知道这一段代码可能会有异常,然后用 try except 包裹住,如果没有发觉,就成了未捕获的异常,然后程序就挂掉了,即使把错误重定向到某个日志文件,也只有很少的错误提醒,没有相关的上下文,比如当时各变量的值。

web 程序可以用 sentry 来解决这个问题,但是一般的 python 命令行程序如何完美地与 sentry 结合?

看 sentry 官网的例子是要用 try except 包裹住啊,但是没有包裹住的情况下怎么办呢?或者把所有代码都包裹住?

或者换一个种说法,我希望在 python 命令行程序能用 sentry 拦截所有的异常,而不需要写 try except 语句。
2431 次点击
所在节点    Python
5 条回复
lxy42
2015-12-03 10:53:41 +08:00
sys.last_traceback sys.last_type sys.last_value 配合 atexit 不知道是否可行,你可以试一下
zhexue69
2015-12-03 11:03:44 +08:00
总要埋点的
可以试试在程序主入口调用的地方埋 try except ,然后用 traceback 库读异常信息。
est
2015-12-03 11:05:54 +08:00
LZ 倒底是想要捕获异常,还是出错了自动重启?

出错自动重启很简单。用 bash :

while true; do python xxx.py; done.
mulog
2015-12-03 11:09:32 +08:00
程序入口 try...except... 然后 traceback.print_exc() 呗
liuxiaoxiaochen
2015-12-03 15:40:00 +08:00
"console.log([1,2,3].map(x => x * x))" 感觉 @mulog 说的是很对的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/240771

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX