为什么使用assert而不是异常抛出?

时间:2013-02-23 22:57:33

标签: exception-handling assert

在Udacity关于代码调试的一个在线课程中,教授说最好在实际代码中使用assert而不是异常抛出。

虽然在我的编程生涯中,我从未见过有人使用它。

你知道为什么它实际上是吗?你同意吗?

PS:下面的图片是Python代码,但我想这个想法适用于所有编程语言。此外,这门课程只有4个月大,所以我想所教授的方法是最现代化的方法。

enter image description here

1 个答案:

答案 0 :(得分:3)

断言仅用于调试,并允许您检查单行中的不变量。断言和类似的宏在测试框架中普遍使用。除了例外,您真的需要关心您的库或程序的其余部分正在做什么。断言很简单。

它会使程序崩溃而不会产生任何歧义 - 你的断言导致了它。在调试器中更容易。可能会捕获异常并且不会停止程序或者可能会导致副作用,例如从通常不会发生的地方进行堆栈展开,调用所有析构函数等等,当您不关心它时因为你正在调试。

除了异常,你需要声明要抛出的函数,必须在C ++等语言中启用异常。

如果您正在以交互方式调试而不仅仅是以批处理模式运行测试用例,并且您的示例是在Python中,我认为您会找到一个启动pdb的函数并在那里停止程序更有帮助。