跳到内容

裸 except (E722)

源自 pycodestyle linter。

作用

检查 try-except 语句中是否存在裸 except 捕获。

为什么这不好?

except 会捕获 BaseException,其中包括 KeyboardInterruptSystemExitException 等。捕获 BaseException 可能会使程序难以中断(例如,使用 Ctrl-C),并且可能会掩盖其他问题。

示例

try:
    raise KeyboardInterrupt("You probably don't mean to break CTRL-C.")
except:
    print("But a bare `except` will ignore keyboard interrupts.")

建议改为

try:
    do_something_that_might_break()
except MoreSpecificException as e:
    handle_error(e)

如果实际上需要捕获未知错误,请使用 Exception,它将捕获常规程序错误,但不会捕获重要的系统异常。

def run_a_function(some_other_fn):
    try:
        some_other_fn()
    except Exception as e:
        print(f"How exceptional! {e}")

参考