<p>这被称为<a href="http://docs.python.org/2/glossary.html#term-eafp">EAFP</a>或<em>比允许更容易请求原谅。从<a href="http://docs.python.org/2/glossary.html">The Python Glossary</a>:</p>
<blockquote>
<p>This common Python coding style assumes the existence of valid keys or attributes and catches exceptions if the assumption proves false. This clean and fast style is characterized by the presence of many <code>try</code> and <code>except</code> statements. The technique contrasts with the <a href="http://docs.python.org/2/glossary.html#term-lbyl">LBYL</a> style common to many other languages such as <a href="/questions/tagged/c" class="post-tag" title="show questions tagged 'c'" rel="tag">c</a>.</p>
</blockquote>
<p><a href="http://docs.python.org/2/glossary.html#term-lbyl">LBYL</a>意思是三思而后行。再次从<a href="http://docs.python.org/2/glossary.html">The Python Glossary</a>:</p>
<blockquote>
<p>This coding style explicitly tests for pre-conditions before making calls or lookups. This style contrasts with the EAFP approach and is characterized by the presence of many if statements.</p>
</blockquote>
<p>接下来,它将为您的<code>if not entityExists(id):</code>建议提供一个很好的反例:</p>
<blockquote>
<p>In a multi-threaded environment, the LBYL approach can risk introducing a race condition between “the looking” and “the leaping”. For example, the code, <code>if key in mapping: return mapping[key]</code> can fail if another thread removes key from mapping after the test, but before the lookup. This issue can be solved with locks or by using the EAFP approach.</p>
</blockquote>
<p>当你用Python语言写代码的时候,谁能帮助你更容易地阅读。在</p>