擅长:python、mysql、java
<p><code>a = get_or_none(content['x'].findAll('div')[0]['y'].find(id='z').html.text)</code>的问题是<code>get_or_none</code>函数无法捕获在<code>content['x'].findAll(...)</code>中抛出的异常,因为该代码在调用</em><code>get_or_none</code>之前执行。你知道吗</p>
<p>为了避免这个问题,您必须延迟代码的执行,直到您进入<code>get_or_none</code>。使用<code>lambda</code>最简单:</p>
<pre><code>a = get_or_none(lambda: content['x'].findAll('div')[0]['y'].find(id='z').html.text)
</code></pre>
<p>在调用lambda函数之前,代码不会被执行。因此,我们可以将<code>get_or_none</code>定义为:</p>
<pre><code>def get_or_none(func):
try:
return func()
except Exception:
return None
</code></pre>