使用assert与raise Exception有什么含义

时间:2013-11-19 15:58:07

标签: python

以下是否存在显着差异?

raise Exception("some exception")

assert False, "some exception"

2 个答案:

答案 0 :(得分:20)

启动Python时,可以使用-O标志禁用断言。出于这个原因,只使用断言进行健全性检查,而不是检查是程序逻辑的一部分。

除此之外,断言提升AssertionError当然存在差异,你真的不应该抓住它。引发异常时,可以使异常类型适合于错误并稍后捕获它。

答案 1 :(得分:1)

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

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

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