如何在没有回溯的情况下重新引发相同的异常?
How to re-raise the same exception without the traceback?
在 except
块中我想引发相同的异常但是 没有 堆栈跟踪和 没有 信息此异常已作为另一个异常的直接原因提出。 (并且没有全局修改 sys.tracebacklimit
)
此外,我有一个非常笨拙的异常 class,它会解析和修改消息文本,所以我不能只重现它。
我目前的做法是
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))
我在这里做的是分解异常信息,重新assemble一个新的异常将在构造函数中解析并拆分为错误代码和消息的消息,并从 except
块 外部引发它 以忘记所有跟踪信息。
有没有更pythonic的方法来做到这一点?我想要的只是在保留异常对象中包含的信息的同时摆脱嘈杂的(在我的情况下是无用的)回溯..
在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"
它当然仍然会显示到 this 行的跟踪,因为它是在异常传播(再次)时添加的。
在 except
块中我想引发相同的异常但是 没有 堆栈跟踪和 没有 信息此异常已作为另一个异常的直接原因提出。 (并且没有全局修改 sys.tracebacklimit
)
此外,我有一个非常笨拙的异常 class,它会解析和修改消息文本,所以我不能只重现它。
我目前的做法是
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))
我在这里做的是分解异常信息,重新assemble一个新的异常将在构造函数中解析并拆分为错误代码和消息的消息,并从 except
块 外部引发它 以忘记所有跟踪信息。
有没有更pythonic的方法来做到这一点?我想要的只是在保留异常对象中包含的信息的同时摆脱嘈杂的(在我的情况下是无用的)回溯..
在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"
它当然仍然会显示到 this 行的跟踪,因为它是在异常传播(再次)时添加的。