有时您想要捕获一个异常只是为了对其进行检查,例如出于记录目的。检查之后,您希望异常像以前一样继续传播。
在这种情况下,只需使用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