Python语言重新引发异常
示例
有时您想要捕获一个异常只是为了对其进行检查,例如出于记录目的。检查之后,您希望异常像以前一样继续传播。
在这种情况下,只需使用raise不带参数的语句。
try: 5 / 0 except ZeroDivisionError: print("Got an error") raise
但是请记住,调用者堆栈中更远的某个人仍然可以捕获异常并以某种方式处理它。在这种情况下,完成的输出可能会很麻烦,因为在任何情况下(捕获或未捕获)它都会发生。因此,提出一个不同的异常可能是一个更好的主意,其中包含您对情况的评论以及原始异常:
try: 5 / 0 except ZeroDivisionError as e: raise ZeroDivisionError("Got an error", e)
但这有一个缺点,就是将异常跟踪精确地减少到此范围raise,raise而无参数保留原始异常跟踪。
在Python3中,您可以使用raise-from语法保留原始堆栈:
raise ZeroDivisionError("Got an error") from e