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