在Python中使用assert的示例?

时间:2010-09-15 19:31:43

标签: python exception assert

我已经读过关于何时使用assert vs. exception,但我仍然没有“得到它”。似乎每当我认为我应该使用assert时,稍后在开发中我会发现我在“跳跃之前”“以确保断言在调用函数时不会失败。由于还有另一个关于更喜欢使用try-except的Python习惯用法,我通常最终会放弃断言并抛出异常。我还没有找到一个使用断言似乎正确的地方。谁能想出一些好的例子呢?

4 个答案:

答案 0 :(得分:22)

一个好的指南是assert,当它的触发意味着您的代码中出现错误时。当您的代码假定某些内容并根据假设行事时,建议使用assert来保护此假设。这个assert失败意味着您的假设不正确,这意味着您的代码不正确。

答案 1 :(得分:15)

倾向于使用assert来检查永远不会发生的事情。有点像理智检查。

要实现的另一件事是优化时删除asserts

  

当在编译时请求优化时,当前代码生成器不会为assert语句发出任何代码。

答案 2 :(得分:3)

Generelly,断言是为了验证您对代码的假设,即在那个时间点,断言成功,或者您的实现是某种错误。一个例外是实际上期望发生错误并“拥抱”它,即允许你处理它。

答案 3 :(得分:3)

一个很好的例子是检查函数的参数是否一致:

def f(probability_vector, positive_number):
    assert sum(probability_vector) == 1., "probability vectors have to sum to 1"
    assert positive_number >= 0., "positive_number should be positive"
    # body of function goes here