今天在学习设计模式时看到"assert"关键字,发现跟exception类似。功能上同样是捕捉程序错误抛出异常,那么什么时候改用断言assert,什么时候该用异常exception呢,在做了相关搜索后发现知乎@vczh说的很清楚很直白一下就懂了。他的原话是
assert用在那些你知道绝对不会发生的事情上,但是因为人总是会犯错误,保不准你写出来的东西跟你想的不一样。所以assert用来捕捉的是程序员自己的错误。
同理,exception捕捉的是用户或者环境的错误。
assert用于捕捉程序员自己的错误,exception用于捕捉用户的错误。在实际多人合作开发中,经常会有写公用方法的情况,方法不能保证其他程序员传入的参数是正确的,每当发生错误时,都要一步一步debug过来(当然对错误清楚的例外),这里如果是用断言校验的话就能很直观的将错误信息反馈给程序员,这还是很方便的。
assert相当于“契约编程设计”的先验条件,虽然平时在开发中经常只是口头说一声,或者只是在代码上注释一下(我们公司小吧,口头先验条件