一、我们先来看一下正常情况下、异常的输出样式:
-- coding: utf-8 -- def foo(a, b): c = a + b raise ValueError('test') return c def bar(a): print('a + 100:', foo(a, 100)) def main(): try: bar(100) except Exception as e: print(repr(e)) if name == 'main': main()
输出:
ValueError(‘test’)
小结:大家可以看到这样的堆栈输出对应问题的排查不是很详细、如果我们需要打印更为详细的堆栈信息、我们该怎么办?
二、几种能打印出详细堆栈信息的方法介绍
2.1. 最简单的方法之一就是使用logging.exception
-- coding: utf-8 -- import logging def foo(a, b): c = a + b raise ValueError('test') return c def bar(a): print('a + 100:', foo(a, 100)) def main(): try: bar(100) except Exception as e: logging.exception(e) if name == 'main': main()
输出:
ERROR:root:test
Traceback (most recent call last):
File “E:/git_work/scrapy_ppt/test.py”, line 16, in main
bar(100)
File “E:/git_work/scrapy_ppt/test.py”, line 11, in bar
print(‘a + 100:’, foo(a, 100))
File “E:/git_work/scrapy_ppt/test.py”, line 6, in foo
raise ValueError(‘test’)
ValueError: test
小结: 有了详细的堆栈信息、我们就能很好的排查问题了。因为知道问题出在哪一行了。
2.2. 其他方法

未经允许不得转载:大自然的搬运工 » 如何打印python运行时异常的堆栈信息?