Я пишу декоратор для применения к функции. Он должен перехватывать любое исключение, а затем вызывать специальное исключение на основе исходного сообщения об исключении. (Это потому, что пена выбрасывает общее исключение 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)