raise-without-from-inside-except (B904)
源自 flake8-bugbear linter。
作用
检查异常处理程序中缺少 from
子句的 raise
语句。
为什么这不好?
在 Python 中,raise
可以与导出当前异常的异常一起使用,也可以不使用。这称为异常链。打印堆栈跟踪时,链式异常的显示方式使其更容易将异常追溯到其根本原因。
从 except
子句中引发异常时,请始终包含 from
子句以方便异常链。 如果异常未链接,将很难将异常追溯到其根本原因。
示例
建议改为
try:
...
except FileNotFoundError as exc:
if ...:
raise RuntimeError("...") from None
else:
raise UserWarning("...") from exc