我正在寫一個裝飾器應用於一個函數。它應該捕獲任何異常,然後根據原始異常消息引發自定義異常。 (這是因爲suds拋出了一個通用的WebFault異常,從其解析Web服務拋出的異常並引發一個Python異常來鏡像它)。Python:異常裝飾器。如何保存堆棧跟蹤
但是,當我在包裝器中引發自定義異常時,希望堆棧跟蹤指向引發原始WebFault異常的函數。我到目前爲止提出了正確的異常(它動態地解析消息並實例化異常類)。 我的問題:如何保留stacktrace以指向引發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
在包裝器中使用[functools.wrap](https://docs.python.org/2/library/functools.html) –
可能的重複[「內部異常」(與追溯)在Python?](http://stackoverflow.com/questions/1350671/inner-exception-with-traceback-in-python) –