跳到内容

raise-without-from-inside-except (B904)

源自 flake8-bugbear linter。

作用

检查异常处理程序中缺少 from 子句的 raise 语句。

为什么这不好?

在 Python 中,raise 可以与导出当前异常的异常一起使用,也可以不使用。这称为异常链。打印堆栈跟踪时,链式异常的显示方式使其更容易将异常追溯到其根本原因。

except 子句中引发异常时,请始终包含 from 子句以方便异常链。 如果异常未链接,将很难将异常追溯到其根本原因。

示例

try:
    ...
except FileNotFoundError:
    if ...:
        raise RuntimeError("...")
    else:
        raise UserWarning("...")

建议改为

try:
    ...
except FileNotFoundError as exc:
    if ...:
        raise RuntimeError("...") from None
    else:
        raise UserWarning("...") from exc

参考