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

つまり、スタック トレースの最上位の 2 つのエントリを削除できるようにしたいのですが、baz()スタックをマングリングするか、発生した例外を特別な方法。

出来ますか?

編集: 1 つのオプションは、baz 内でレイズしてすぐにキャッチし、トリミングされたトレースバックで再レイズすることですが、その方法がわかりません。

編集2

私が必要とするのはこれです、疑似コードで

def baz():
    raise ValueError, "hello", <traceback built from current frame stack, except the last two>
4

0 に答える 0