Python中异常处理程序的成本

在另一个问题中,公认的答案建议用try/except块替换Python代码中的(非常便宜的)if语句以提高性能

撇开编码风格问题不谈,假设从不触发异常,有一个异常处理程序(性能方面)与没有一个异常处理程序(性能方面)与有一个compare to zero if语句有多大区别

为什么不使用timeit模块测量它?这样,您就可以看到它是否与您的应用程序相关

好的,我刚刚尝试了以下方法:

导入时间信息
语句=[“””\
尝试:
b=10/a
除零误差外:
通过“”,
“””\
如果是:
b=10/a“,
“b=10/a”]
对于(1,0)中的a:
对于报表中的s:
t=timeit.Timer(stmt=s,setup=’a={}’。格式(a))
打印(“a={}\n{}”。格式(a,s))
打印(“%.2f usec/pass\n”%(1000000*t.timeit(number=100000)/100000))

结果:

a=1
尝试:
b=10/a
除零误差外:
通过
0.25 usec/次
a=1
如果是:
b=10/a
0.29 usec/次
a=1
b=10/a
0.22 usec/次
a=0
尝试:
b=10/a
除零误差外:
通过
0.57 usec/次
a=0
如果是:
b=10/a
0.04 usec/次
a=0
b=10/a
ZeroDivisionError:整数除以零或模乘零

因此,正如预期的那样,没有任何异常处理程序会稍微快一点(但当异常发生时会在脸上爆炸),并且只要不满足条件,try/except比显式if快一点

但这一切都在同一个数量级内,无论哪种方式都不太重要。只有在实际满足条件的情况下,if版本才会明显更快

发表评论