Python: Декоратор исключений. Как сохранить трассировку стека

Я пишу декоратор для применения к функции. Он должен перехватывать любое исключение, а затем вызывать специальное исключение на основе исходного сообщения об исключении. (Это потому, что пена выбрасывает общее исключение WebFault, из сообщения которого я анализирую исключение, созданное веб-службой, и вызываю исключение Python для его отражения.)

Однако, когда я вызываю настраиваемое исключение в оболочке, я хочу, чтобы трассировка стека указывала на функция, которая вызвала исходное исключение 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)
19
задан igniteflow 25 January 2012 в 16:09
поделиться