在抛出异常之前操纵异常的堆栈跟踪(Python)
我正在用Python开发一个惰性计算库,它允许用户编写普通代码,而在稍后的时间点对其进行计算。一个问题是,例外情况相当混乱。这就是为什么我想抛出带有修改堆栈跟踪的异常。它应该看起来像是在根本没有延迟计算的情况下触发的异常(或者只是有一个简短的提示) 这是我已经尝试过的。我没有找到更好的回溯方法,但如果可能的话,我不希望在create_tb中抛出异常在抛出异常之前操纵异常的堆栈跟踪(Python),python,python-3.x,Python,Python 3.x,我正在用Python开发一个惰性计算库,它允许用户编写普通代码,而在稍后的时间点对其进行计算。一个问题是,例外情况相当混乱。这就是为什么我想抛出带有修改堆栈跟踪的异常。它应该看起来像是在根本没有延迟计算的情况下触发的异常(或者只是有一个简短的提示) 这是我已经尝试过的。我没有找到更好的回溯方法,但如果可能的话,我不希望在create_tb中抛出异常 import sys def create_tb(): # Capture the stack trace try: raise E
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
这可能吗
我对Python比较陌生。如果有更多的植物学方法来实现我的目标,我很高兴得到建议。我找到了一种方法来抑制以前发生的异常的上下文:
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
但我不确定它1)是否是python方式2)是否真的是您所需要的。我找到了一种方法来抑制以前发生的异常的上下文:
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
但我不确定1)是不是蟒蛇式的方式2)是你真正需要的。谢谢。知道这一点很有用,但不能解决我的问题。谢谢。了解这一点很有用,但不能解决我的问题。