【问题标题】:What are the implications of using assert vs. raise Exception使用 assert 与 raise Exception 的含义是什么
【发布时间】:2013-12-03 06:42:16
【问题描述】:

与以下有显着差异吗?

raise Exception("some exception")

assert False, "some exception"

【问题讨论】:

  • 引发的异常是不一样的。

标签: python


【解决方案1】:

对@svk 的回答进行一些扩展(它已经描述了技术差异并简要说明了概念上的差异):断言和异常旨在用于不同的目的。

您可以将断言视为旨在向开发人员提供信息的构造。也就是说,如果使用得当,断言将通知代码的读者(或静态检查器)关于在运行时必须满足的条件才能使代码正确。类似地,在运行时失败的断言将传达这样的信息,即代码中的某处存在需要修复的错误。由于检测到错误意味着软件不可靠(无法预测如果继续会发生什么),并且由于软件本身无法处理它(代码无法自行修复),终止执行通常是明智的 - 这就是为什么您不应该捕获 AssertionError 并继续。

相比之下,异常通常不会用于识别软件中是否存在错误,而是用于识别可能有某种方式在更高级别(捕获异常的地方)处理它们的异常情况。

【讨论】:

    【解决方案2】:

    在启动 Python 时,可以使用 -O 标志禁用断言。因此,仅将断言用于完整性检查,而不是用于检查程序逻辑的一部分。

    除此之外,当然还有断言引发AssertionError 的区别,你真的不应该抓住它。当您引发异常时,您可以使异常的类型适合错误并在以后捕获它。

    【讨论】:

    • 学到了非常有用的东西!
    猜你喜欢
    • 2021-05-15
    • 2017-03-04
    • 2017-03-09
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    相关资源
    最近更新 更多