擅长:python、mysql、java
<p>捕获异常的代价是昂贵的,但是异常应该是异常的(读,不经常发生)。如果异常很少,<code>try/catch</code>比LBYL快。在</p>
<p>下面的示例在键存在和不存在时使用异常和LBYL计算字典键查找的次数:</p>
<pre><code>import timeit
s = []
s.append('''\
try:
x = D['key']
except KeyError:
x = None
''')
s.append('''\
x = D['key'] if 'key' in D else None
''')
s.append('''\
try:
x = D['xxx']
except KeyError:
x = None
''')
s.append('''\
x = D['xxx'] if 'xxx' in D else None
''')
for i,c in enumerate(s,1):
t = timeit.Timer(c,"D={'key':'value'}")
print('Run',i,'=',min(t.repeat()))
</code></pre>
<h3>输出</h3>
^{pr2}$
<p>通常情况下也不例外,<code>try/catch</code>与LBYL相比“非常有效”。在</p>