擅长:python、mysql、java
<p>您正在测试<code>i is not None or i.isupper()</code>。当<code>i</code><em>是</em><code>None</code>时,这不起作用:</p>
<pre><code>(i is not None) or (i.isupper())
</code></pre>
<p>延迟求值;首先计算左边的参数,并且仅当<code>False</code>是第二个被求值的参数时。第一个是<code>False</code>,如果<code>i</code>是<code>None</code>,所以右手表达式只计算为<code>None.isupper()</code>。在</p>
<p>{cde>{cde}而不是^ cd9}:</p>
^{pr2}$
<p>上面的表达式是<code>i is None or i.isupper()</code>的正确逻辑反转。在</p>
<p>或者在原始表达式周围使用<code>not (..)</code>:</p>
<pre><code>x = i if not (i is None or i.isupper()) else None
</code></pre>
<p>因为您使用的是正则的<code>for</code>循环,因此不需要在这里使用条件表达式;下面将赋值给现有的循环变量<code>i</code>,就足够了:</p>
<pre><code>for i in [None,'foo',None,'FOO',None,'bar']:
if i and i.isupper():
i = None
print i
</code></pre>