在方法中使用assert - Python

2 投票
4 回答
911 浏览
提问于 2025-04-16 16:14

在方法中使用断言是不是一种不好的做法呢?

比如说:

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

有没有什么想法呢?

4 个回答

0

这不是问题,但如果你的代码里有的断言语句比实际的代码还多,那我会很生气。

2

没关系,因为你可以在运行你的应用时加上 -O 这个命令行选项,这样你的 assert 语句就不会生成任何代码了,可以查看这里

更新:

不过,你还是应该处理所有的错误。否则在去掉了断言后,可能会出现未处理的异常。(正如麦康奈尔所建议的。可以查看他的引用 这里

6

一点也不。

在你的例子中,只要你已经说明了 add 方法需要整数,开头就用 assert 来检查这个条件其实是个很好的做法。

想想你还有哪些选择,以及这些选择有多糟糕:

  • 不验证你的参数。这意味着,方法会在后面出错,出现奇怪的错误信息,这可能会让调用这个方法的人感到困惑,还得去查看 add 的实现来搞清楚发生了什么。
  • 好心尝试把输入转换成 int - 这个主意非常糟糕,用户会一直想知道为什么 add(2.4,3.1) 还总是返回 5

撰写回答