求助: Python 异常信息打印

2021-05-27 17:09:11 +08:00
 whnoob

1.场景

目前项目里采用 flask 框架做服务,用 teardown_request 做了一个简单的全局接口请求完成后的处理,示例代码如下

def teardown_request(exception):
    db_session = g.get("pg_db")
    if db_session:
        db_session.close()
    if exception is not None:
        logging.warn(exception)

2.问题

在 teardown 钩子函数里获取了一个 exception,但是打印的时候只会显示异常的信息。想要打印完整堆栈信息的时候应该怎么处理。traceback 模块结合 try catch 挺好用的,这种场景好像和直接打印效果一样,并没有完整的堆栈,如果我想要获取 exception 这个对象的完整堆栈的话需要怎么弄,求助各位大佬。
1629 次点击
所在节点    Python
6 条回复
chenqh
2021-05-27 17:10:14 +08:00
logging.warn(exception,exc_info=True)
chenqh
2021-05-27 17:11:34 +08:00
@chenqh 或者使用第三方库, 比如 stackprinter

```
from stackprinter import formatting
logging.info(formatting.format_exc_info(*exc_info, truncate_vals=1000))

```

或者用 better_exceptions
whnoob
2021-05-27 17:28:57 +08:00
@chenqh 好的,感谢,我再试试
Wincer
2021-05-27 17:39:12 +08:00
logging.warn 替换成 logging.exception 即可,或者像 1 楼说的
RandomAccess
2021-05-27 17:56:50 +08:00
from trackback import format_exc
logger.error(format_exc())
whnoob
2021-05-27 18:00:07 +08:00
感谢各位大佬 @Wincer @RandomAccess @chenqh 后来调试之后发现是代码返回问题,导致框架层面的异常信息打印了出来,并不是具体的业务代码问题,所以没有指到具体的业务代码。

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

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

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

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

© 2021 V2EX