在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
块外部提升,以便忘记所有跟踪信息。
有更多的pythonic方法吗?我想要的只是在保留异常对象中包含的信息的同时摆脱嘈杂(在我的情况下无用)跟踪..
答案 0 :(得分:3)
在Python 3中,您可以使用with_traceback
删除到目前为止累积的回溯条目:
try: ...
except Exception as e:
raise e.with_traceback(None)
在Python 2中,它只是
try: ...
except Exception as e:
raise e # not just "raise"
当然,它仍会显示此行的跟踪,因为随着异常的传播(再次),它会被添加。