除了 Python 之外,还有裸露的替代品吗?

问题描述 投票:0回答:1

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

但是有时我想运行一些Python代码,这些代码在任何情况下都会抛出未处理的异常并停止程序运行:

例如,图形应用程序可能运行用户定义的脚本。我不知道该脚本可能会触发哪些错误,因此检查特定错误没有用:

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

这可行,但代码检查工具警告不应使用裸露的

except
。虽然我可以在每种情况下抑制警告,但我正在考虑使用
except BaseException:
来消除警告。


裸露的

except:
保证
except BaseException:
等效吗?或者是否存在细微的差异,裸露的 except 可能会捕获异常,而
BaseException
不会?

python exception
1个回答
1
投票

来自文档

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

也在PEP8(强调我的)

裸露的

except
: 子句将捕获 SystemExit 和 KeyboardInterrupt 异常,从而使使用 Control-C 中断程序变得更加困难,并且可能掩盖其他问题。如果要捕获表示程序错误的所有异常,请使用
except Exception:
bare except 相当于
except BaseException:
)。

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

© www.soinside.com 2019 - 2024. All rights reserved.