假设我有以下内容:
def foo():
bar()
def bar():
baz()
def baz():
raise ValueError("hello")
foo()
不出所料,痕迹是
$ python x.py
Traceback (most recent call last):
File "x.py", line 10, in <module>
foo()
File "x.py", line 2, in foo
bar()
File "x.py", line 5, in bar
baz()
File "x.py", line 8, in baz
raise ValueError("hello")
ValueError: hello
现在假设我希望回溯看起来像这样
Traceback (most recent call last):
File "x.py", line 10, in <module>
foo()
ValueError: hello
也就是说,我希望能够删除堆栈跟踪中最顶层的两个条目,并且我想在 内执行它baz()
,即在引发异常时,要么通过破坏堆栈,要么通过在一种特殊的方式。
可能吗?
编辑:一种选择是在 baz 内加注并立即接球,然后用修剪过的回溯重新加注,但我不知道该怎么做。
编辑 2:
我需要的是这个,用伪代码
def baz():
raise ValueError, "hello", <traceback built from current frame stack, except the last two>