我正在使用Python的惰性评估库,该库允许用户编写普通代码,而稍后再对其进行评估。一个问题是异常非常混乱。这就是为什么我想使用修改后的堆栈跟踪引发异常。看起来好像该异常是在完全没有惰性求值的情况下触发的(或者只是带有简短提示)。
这是我已经尝试过的。我没有找到一种更好的方法来进行回溯,但如果可能的话,我宁愿不要在create_tb中抛出异常。
import sys
def create_tb(): # Capture the stack trace
try:
raise Exception("A")
except:
_, _, tb = sys.exc_info()
return tb
def raise_with_tb(tb): # It should look like "B" was triggered in create_tb
raise Exception("B").with_traceback(tb)
tb = create_tb()
raise_with_tb(tb)
但是输出是:
Traceback (most recent call last):
File ".../test.py", line 16, in <module>
raise_with_tb(tb)
File ".../test.py", line 12, in raise_with_tb
raise Exception("B").with_traceback(tb)
File ".../test.py", line 5, in create_tb
raise Exception("A")
Exception: B
代替类似的东西
Traceback (most recent call last):
File ".../test.py", line 5, in create_tb
raise Exception("B")
Exception: B
这可能吗?
我对Python比较陌生。如果有更多的植物实现目标的方法,我很乐意提出建议。
答案 0 :(得分:0)
我发现了一种抑制以前发生的异常的方法:
try:
raise Exception('original exception message')
except Exception as exc:
my_custom_exception = Exception('my custom message')
my_custom_exception.__suppress_context__ = True
raise my_custom_exception
它提供以下回溯:
Traceback (most recent call last):
File "ex.py", line 6, in <module>
raise my_custom_exception
Exception: my custom message
用行my_custom_exception.__suppress_context__ = True
注释回溯也有以前的异常:
Traceback (most recent call last):
File "ex.py", line 2, in <module>
raise Exception('original exception message')
Exception: original exception message
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "ex.py", line 6, in <module>
raise my_custom_exception
Exception: my custom message
但是我不确定1)是pythonic方式2)确实是您所需要的。