私は関数に適用するデコレータを書いています。例外を捕捉し、元の例外メッセージに基づいてカスタム例外を発生させる必要があります。 (これは、sudsがジェネリックWebFault例外をスローし、そのメッセージからWebサービスからスローされた例外を解析し、それをミラーリングするPythonの例外を発生させるからです。)しかし、ラッパーでカスタム例外を発生させると、 stacktraceが元のWebFault例外を発生させた関数を指すようにします。私はこれまでに正しい例外を発生させています(メッセージを動的に解析して例外クラスをインスタンス化します)。 私の質問: WebTrax例外を発生させた元の関数を指すようにスタックトレースを保存するにはどうすればよいですか? Pythonの2.xでPython:例外デコレータ。 stacktraceを保持する方法
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) –