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而无参数保留原始异常跟踪。

在Python 3中,您可以使用raise-from语法保留原始堆栈:

    raise ZeroDivisionError("Got an error") from e