为什么python设计为str(None)返回'None'而不是空字符串?

时间:2013-07-17 04:25:40

标签: python

在我所知道的其他一些语言中,null到字符串转换的直观结果应该是一个空字符串。 为什么Python被设计为使'None'成为一种特殊的字符串? 当从函数

检查返回值时,这会导致额外的工作
result = foo() # foo will return None if failure 
if result is not None and len(str(result)) > 0:
    # ... deal with result 
    pass 

如果str(None)返回空字符串,则代码可以更短:

if len(str(result)) > 0:
    # ... deal with result 
    pass 

看起来Python试图变得冗长,让日志文件更容易理解?

2 个答案:

答案 0 :(得分:11)

通过检查len(str(result))来检查字符串中是否包含字符绝对不是pythonic(请参阅http://www.python.org/dev/peps/pep-0008/)。

result = foo() # foo will return None if failure 
if result:
    # deal with result.
    pass

None''强制使用布尔值False


如果你真的问为什么str(None)确实会返回'None',那么我认为这是因为three-valued logic有必要。 TrueFalseNone可以一起使用,以确定逻辑表达式是TrueFalse还是无法确定。身份函数是最容易表示的。

True  -> 'True'
False -> 'False'
None  -> 'None'

如果str(None)''

,以下情况会非常奇怪
>>> 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'

现在,如果你真的想要一个权威的答案,请问Guido。


如果您真的希望str(None)给您'',请阅读其他问题:Python: most idiomatic way to convert None to empty string?

答案 1 :(得分:4)

基本上,因为空字符串不是None的表示。 None是与空字符串或其他任何内容不同的特殊值。如the docs中所述,str应该

  

返回一个包含对象的可打印表示的字符串。

基本上,str应该返回可打印和人类可读的内容。空字符串不是None的可读表示。