我正在编写一个装饰器来应用于一个函数。它应该捕获任何异常,然后根据原始异常消息引发自定义异常。(这是因为suds抛出了一个通用的WebFault异常,我从中解析Web服务抛出的异常并引发Python异常以模拟它。)
然而,在包装器中引发自定义异常时,我希望堆栈跟踪指向引发原始WebFault异常的函数。到目前为止,我的代码已经正确地引发了异常(动态解析消息并实例化异常类)。 我的问题:如何保留堆栈跟踪,以使其指向引发WebFault异常的原始函数?
然而,在包装器中引发自定义异常时,我希望堆栈跟踪指向引发原始WebFault异常的函数。到目前为止,我的代码已经正确地引发了异常(动态解析消息并实例化异常类)。 我的问题:如何保留堆栈跟踪,以使其指向引发WebFault异常的原始函数?
from functools import wraps
def try_except(fn):
def wrapped(*args, **kwargs):
try:
fn(*args, **kwargs)
except Exception, e:
parser = exceptions.ExceptionParser()
raised_exception = parser.get_raised_exception_class_name(e)
exception = getattr(exceptions, raised_exception)
raise exception(parser.get_message(e))
return wraps(fn)(wrapped)
traceback
模块吗?http://docs.python.org/library/traceback.html - stderr