如何使用以下API实现上下文管理器:
s = "this is my message"
with PushStackFrame(s):
raise RuntimeError("something")
这样当引发RuntimeError时,我收到以下消息:
Traceback (most recent call last):
File "foo.py", line 4, in <module>
## PushStackFrame: this is my message ## KEY LINE
File "foo.py", line 5, in <module>
raise RuntimeError("something")
RuntimeError: something
最重要的是,我希望传递给PushStackFrame
的字符串能够插入 verbatim 到堆栈跟踪中,我不想只看到代码。
执行此操作的一种方法是在离开上下文管理器的过程中捕获异常,找出在回溯中调用上下文管理器的位置,并在使用traceback重新抛出异常之前插入新的回溯帧。我不想这样做。