跳到内容

blind-except (BLE001)

源自 flake8-blind-except 代码检查器。

作用

检查捕获所有异常的 except 子句。这包括裸 exceptexcept BaseExceptionexcept Exception

为什么这不好?

过于宽泛的 except 子句可能导致意外行为,例如捕获 KeyboardInterruptSystemExit 异常,阻止用户退出程序。

不要捕获所有异常,而是只捕获预计会在 try 块中引发的异常。

示例

try:
    foo()
except BaseException:
    ...

建议改为

try:
    foo()
except FileNotFoundError:
    ...

重新引发的异常将不会被标记,因为预计它们会在其他地方被捕获。

try:
    foo()
except BaseException:
    raise

通过 logging.exception()logging.error() 并启用 exc_info 来记录的异常将不会被标记,因为这是传播异常追踪的常见模式。

try:
    foo()
except BaseException:
    logging.exception("Something went wrong")

参考