在方法中使用assert - Python

时间:2011-04-22 12:40:25

标签: python exception-handling assert

在方法中使用断言是不好的做法吗?

e.g。

def add(x, y):
    assert isinstance(x, int) and isinstance(y, int)
    return x + y

有什么想法吗?

4 个答案:

答案 0 :(得分:7)

完全没有。

在您的示例中,如果您已记录add期望整数,那么在方法开头assert这个约束实际上是很好的做法。

想象一下你拥有的其他选择以及它们有多糟糕:

  • 不验证您的参数。这意味着,该方法将在稍后失败并出现奇怪的回溯,这可能会使调用者感到困惑并迫使他查看add的实现以获得提示正在发生的事情。
  • 很好并尝试将输入转换为int - 非常糟糕的主意,用户会不断怀疑为什么add(2.4,3.1)会一直返回5

答案 1 :(得分:2)

没关系,因为您可以使用-O命令行选项运行应用程序,并且不会为您的断言语句生成代码see here

更新

但你也应该处理所有错误。否则在剥离断言之后可能会发生未处理的异常。 (正如麦康纳尔所建议的那样。请参阅他的引文here

答案 2 :(得分:0)

不是,但如果您的代码包含的断言语句多于您的实际代码,那么我会生气。

答案 3 :(得分:0)

而不是使用断言并引发Assertion异常...更好地使用instance()执行正确的检查并引发正确的TypeError。