代码中,我们经常会用到assert;
assert的作用很让人迷惑。
事实上,在开发完成之后,上线,assert会被删除,人工删除。
因为assert的本质是程序发出exit()信号,强行中断程序执行。
但实际上,程序应该是一个鲁棒的,能够处理这种异常的。起码,他要能够收集这种异常。
比如一个工业软件,机器正在嘎吱嘎吱的运转,遇到了assert,直接卡死。机器上面的齿轮还在转动,把人的手剁了。
assert在我的理解里,应该是作为一个开发过程中的产物。
不是用来偷懒的。比如一个复杂的逻辑,想不到会不会发生某种场景,就用个assert。
应该是一个中间产物。这个我就不再谈了。
assert放在函数入口进行函数检查。这是不行的。如果函数输入不符合要求,应该raise error.
有可能有段逻辑太复杂了,实在想不到输出,可以用assert检查一下范围。但我觉得也不行。
我甚至觉得一个程序里面,不应该有assert。assert不涉及逻辑,只是在给自己用。有可能有问题的地方,应该raise error。
assert 更多的像是自我测试,检查自己程序的结果,这样会比较好。用在UT上。