如何在Python中生成像堆栈跟踪的Java?

在我用Java编程的经验中,我非常喜欢它在代码出错时产生的堆栈跟踪,但是我觉得python生成的跟踪比较有点欠缺。 例如,java中的跟踪可能如下所示:

java.lang.RuntimeException
    at test.package.Example.c(Example.java:20)
    at test.package.Example.b(Example.java:15)
    at test.package.Example.a(Example.java:10)

而python跟踪可能如下所示:

Traceback (most recent call last):
  File "example.py", line 10, in <module>
    a()
  File "example.py", line 2, in a
    b()
  File "example.py", line 5, in b
    c()
  File "example.py", line 8, in c
    raise Exception
Exception

虽然这两个痕迹基本上传达了相同的信息,但我个人发现,来自java的痕迹更容易遵循。

有没有办法改变python用于打印堆栈跟踪的格式,还是这种改变要求我在我的程序的根目录下创建一个自定义的异常处理程序?


有一种方法可以改变Python用来格式化堆栈跟踪的格式,那就是您自己编写自己的格式化程序。 只有一种内置格式。

您可以将自己的函数分配给sys.excepthook ,并且它将充当顶级异常处理程序,它可以访问即将被捕获并导致程序退出的异常。 在那里你可以利用追溯对象来设置你想要的东西的格式。 Triptych的答案显示了如何使用traceback模块获取每个堆栈帧的信息。 extract_tb返回违规行的文件名,行号,函数和源文本的四元组,所以如果你不想显示源文本,你可以丢弃它并连接其余的。 但是你必须完成你想要看到的任何输出的构建工作。


使用追溯模块

import traceback
try:
    x= 1/0
except Exception as e:
    print(e)
    traceback.print_exc()

如果您真的想要,可以使用traceback.extract_tb方法重新格式化异常回溯。

ref:https://docs.python.org/2/library/traceback.html#traceback.extract_tb

链接地址: http://www.djcxy.com/p/82431.html

上一篇: How to generate java like stack trace in python?

下一篇: Get current stack trace in Ruby without raising an exception