<p>通过检查<code>len(str(result))</code>来检查字符串中是否有字符绝对不是pythonic(请参见<a href="http://www.python.org/dev/peps/pep-0008/" rel="nofollow noreferrer">http://www.python.org/dev/peps/pep-0008/</a>)。</p>
<pre><code>result = foo() # foo will return None if failure
if result:
# deal with result.
pass
</code></pre>
<p><code>None</code>和<code>''</code>强制为布尔值<code>False</code>。</p>
<hr/>
<p>如果你真的问为什么<code>str(None)</code>返回<code>'None'</code>,那么我相信这是因为<a href="http://en.wikipedia.org/wiki/Three-valued_logic" rel="nofollow noreferrer">three-valued logic</a>必须返回。<code>True</code>、<code>False</code>和<code>None</code>可以一起用于确定逻辑表达式是<code>True</code>、<code>False</code>还是不能确定。标识函数是最容易表示的。</p>
<pre><code>True -> 'True'
False -> 'False'
None -> 'None'
</code></pre>
<p>如果<code>str(None)</code>是<code>''</code>,那么下面的情况会非常奇怪:</p>
<pre><code>>>> or_statement = lambda a, b: "%s or %s = %s" % (a, b, a or b)
>>> or_statement(True, False)
'True or False = True'
>>> or_statement(True, None)
'True or None = True'
>>> or_statement(None, None)
'None or None = None'
</code></pre>
<p>现在,如果你真的想得到一个权威的答案,就去问圭多。</p>
<hr/>
<p>如果你真的想让<code>str(None)</code>给你<code>''</code>请阅读另一个问题:<a href="https://stackoverflow.com/questions/1034573/python-most-idiomatic-way-to-convert-none-to-empty-string">Python: most idiomatic way to convert None to empty string?</a></p>