在方法中使用断言是不好的做法吗?
e.g。
def add(x, y):
assert isinstance(x, int) and isinstance(y, int)
return x + y
有什么想法吗?
答案 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。