代码之家  ›  专栏  ›  技术社区  ›  ideasman42

除了Python中的裸露之外,其他选项是什么?

  •  1
  • ideasman42  · 技术社区  · 11 月前

    关于异常处理的文档往往侧重于使用特定的异常类型,这通常是一个很好的建议。

    然而,有时我想运行一些Python代码 在任何情况下 引发未处理的异常并停止程序运行:

    例如,图形应用程序可能运行用户定义的脚本。我不知道脚本可能会触发什么错误,所以检查特定错误是没有用的:

    try:
        run_script_file(filepath)
    except:
        import traceback
        print("Script:", filepath, "failed with error!")
        traceback.print_exc()
    

    这是有效的,但代码检查工具警告说 except 不应使用。虽然我可以在每种情况下抑制警告,但我正在考虑使用 except BaseException: 以消除警告。


    是裸露的 except: 放心 相当于 BaseException除外: 或者有没有细微的区别,裸露的exception可能会捕获异常 BaseException 不会?

    1 回复  |  直到 11 月前
        1
  •  1
  •   Woodford    11 月前

    来自 documentation :

    在Python中,所有异常都必须是从BaseException派生的类的实例。

    还注意到 PEP8 (重点是我的) :

    光秃秃的 except :子句将捕获SystemExit和KeyboardInterrupt异常,使使用Control-C中断程序变得更加困难,并可能掩盖其他问题。如果要捕获所有表示程序错误的异常,请使用 except Exception: ( 裸露的除外等效于 except BaseException: ).

    所以,是的,它们是等价的。