【发布时间】:2017-12-09 12:00:44
【问题描述】:
编写具有多种条件的验证函数的推荐结构是什么?请参阅这两个示例。第一个看起来很丑,第二个不太常见,可能是因为assert 通常用于排除意外行为。有更好的选择吗?
def validate(val):
if cond1(val):
return False
if cond2(val):
return False
if cond3(val)
return False
return True
或者
def validate(val):
try:
assert cond1(val)
assert cond2(val)
assert cond3(val)
return True
except AssertionError:
return False
【问题讨论】:
-
您应该不使用
assert来验证数据!它用于验证程序的逻辑:如果您的程序逻辑正确,您可以使用它来测试应该永远发生的条件。如果程序引发AssertionError,则意味着您的代码错误并且需要调试。 -
@PM2Ring 另外,如果代码优化assert statements are removed.
-
@PeterWood 确实!在看到您的评论之前,我实际上已将该信息添加到我的答案中。 ;)
-
如果您编写的代码将由其他人维护,我会使用第一个,因为它非常易读。代码中的诗歌在智力上令人满意,并且表现出敏锐的头脑,但可能会再次困扰。
-
@copper.hat “每个人都知道,调试的难度是编写程序的两倍。所以,如果你在编写程序时尽可能地聪明,你会怎么做调试它?” — Brian Kernighan,编程风格的要素,第 2 版,第 2 章。