python异常处理比PHP和/或其他语言更有效吗?

我已经钻了我的头(至少在PHP中)它是badbadmojo使用try … catch块进行流量控制。我学到的是使用它们来处理意外的错误,而不是确定程序的逻辑流程,因为catch块是昂贵的。

现在我正在学习python,我看到很多例外和EAFP原则。这是否意味着python在处理异常方面更有效率,所以我不需要担心流量控制,还是原则仍然存在?如果没有,PHP是从规范(与其他语言相比)的例外,还是Python?

最佳答案
历史上,在C语言中,与其他形式的流控制相同的语言相比,异常非常慢。

在C中,有两件事情在工作:

抛出异常非常复杂。堆栈需要解开,并且在本地代码中这样做比在基于高级别的基于VM的语言中要困难得多。
>定期,直接流量控制非常快。它是本地代码;一个分支是一个几个指令,其中一个异常回滚堆栈调用一个复杂的算法(在一个大的可能的压缩表中查找堆栈数据等等)。

这种性能差异导致了例外的一般智慧:仅仅为了不寻常的事情做到这一点,所以它只用于最有利的地方,而不是在哪里会伤害到性能。

这不适用于高级语言。这也有两个原因:

回滚堆栈是非常简单的。堆栈很容易检查;您不需要魔术表来知道在任何给定时间内回滚堆栈以及构建什么对象有多远。
常规程序流程本来就较慢。在基于虚拟机的语言中,一切都需要更多的工作才能开始。

例外仍然不是免费的,但差距不再是令人担忧的事情。这意味着C中形成的一般智慧在这里被误用了。常规程序流程中经常使用异常。

事实上,它们是内置在语言中,在你一直使用的结构中。每次使用迭代器时,Xrange(1000)中的x都会使用StopIteration异常来结束循环。

在Python中选择异常或线性流控制是更有意义的。不要根据性能进行选择,除非您实际上处于性能重要的内在循环中;在这种情况下,一如既往地剖析并确定它是否真的重要。

(我不能说PHP。)

转载注明原文:python异常处理比PHP和/或其他语言更有效吗? - 代码日志