2

假设我有以下内容:

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>
4

0 回答 0