kei*_*ant 21 php python programming-languages exception
我已经深入了解(至少在PHP中)使用try... catch块进行流量控制是badbadmojo .我学到的只是使用它们来处理意外错误,而不是确定程序的逻辑流程,因为catch块很昂贵.
现在我正在学习python,我看到了很多例外和EAFP原则.这是否意味着python在处理异常方面更有效率,所以我不需要为流量控制担心它们,或者原理是否仍然存在?如果没有,那么PHP是规范的异常(与其他语言相比),还是Python?
Gle*_*ard 13
从历史上看,在像C++这样的语言中,与同一语言中的其他形式的流控制相比,异常非常缓慢.
在C++中,有两件事在起作用:
这种性能上的差异导致了例外背后的一般智慧:只针对不寻常的事情做到这一点,所以它只用于最有利的地方,而不是它会损害性能的地方.
这不适用于高级语言.这也有两个原因:
例外仍然不是免费的,但这种差异不再是令人担心的问题.这意味着在C++中形成的一般智慧在这里被误用.在正常的程序流程中经常使用例外.
事实上,它们是在语言中构建的,在你一直使用的构造中.每次使用迭代器时 - 每次都会for x in xrange(1000)使用StopIteration异常来结束循环.
在Python中选择异常或线性流控制更有意义.不要根据表现选择,除非你实际上处于一个性能重要的内循环中; 在这种情况下,一如既往,剖析并查明它是否真正重要.
(我不能代表PHP.)
我不相信EAFP鼓励使用流量控制的例外.相反,它告诉我们在引用它之前,我们不需要费心检查对象的字典或属性中是否存在特定键.
抛出异常作为if语句的替代或具有正确的while语句或代替使用break或continue在循环内部不属于该类别.这是懒惰的,容易出错的程序,应该避免.