如何打印python运行时异常的堆栈信息?

一、我们先来看一下正常情况下、异常的输出样式:

-- 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运行时异常的堆栈信息?

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址