【发布时间】:2013-12-03 06:42:16
【问题描述】:
与以下有显着差异吗?
raise Exception("some exception")
assert False, "some exception"
【问题讨论】:
-
引发的异常是不一样的。
标签: python
与以下有显着差异吗?
raise Exception("some exception")
assert False, "some exception"
【问题讨论】:
标签: python
对@svk 的回答进行一些扩展(它已经描述了技术差异并简要说明了概念上的差异):断言和异常旨在用于不同的目的。
您可以将断言视为旨在向开发人员提供信息的构造。也就是说,如果使用得当,断言将通知代码的读者(或静态检查器)关于在运行时必须满足的条件才能使代码正确。类似地,在运行时失败的断言将传达这样的信息,即代码中的某处存在需要修复的错误。由于检测到错误意味着软件不可靠(无法预测如果继续会发生什么),并且由于软件本身无法处理它(代码无法自行修复),终止执行通常是明智的 - 这就是为什么您不应该捕获 AssertionError 并继续。
相比之下,异常通常不会用于识别软件中是否存在错误,而是用于识别可能有某种方式在更高级别(捕获异常的地方)处理它们的异常情况。
【讨论】:
在启动 Python 时,可以使用 -O 标志禁用断言。因此,仅将断言用于完整性检查,而不是用于检查程序逻辑的一部分。
除此之外,当然还有断言引发AssertionError 的区别,你真的不应该抓住它。当您引发异常时,您可以使异常的类型适合错误并在以后捕获它。
【讨论】: