В блоке except
я хочу вызвать то же исключение, но без трассировки стека и без информации о том, что это исключение было вызвано как прямая причина другого исключения.(и без изменения sys.tracebacklimit
глобально)
Кроме того, у меня есть очень неуклюжий класс исключений, который анализирует и изменяет текст сообщения, поэтому я не могу просто воспроизвести его.
Мой текущий подход
try:
deeply_nested_function_that_raises_exception()
except ClumsyExceptionBaseClass as exc:
cls, code, msg = exc.__class__, exc.code, exc.msg
raise cls("Error: %d %s" % (code, msg))
Здесь я делаю декомпозицию информацию об исключении, повторную сборку новое исключение с сообщением, которое будет проанализировано и разбито накод ошибки и сообщение в конструкторе и вызовите его за пределами блока except
, чтобы забыть всю информацию трассировки.
Есть ли более питонский способ сделать это?Все, что я хочу, это избавиться от шумной (и бесполезной в моем случае) трассировки, сохраняя информацию, содержащуюся в объекте исключения.