【发布时间】:2013-07-15 11:51:14
【问题描述】:
在我知道的其他一些语言中,null 到字符串转换的直观结果应该是一个空字符串。 为什么 Python 旨在使“无”成为一种特殊的字符串? 当检查函数的返回值时,这可能会导致额外的工作
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 试图变得冗长,以使日志文件更易于理解?
【问题讨论】:
-
这并不能真正回答你的问题,但它确实绕过了你的问题。
bool(None) == False,但也bool('') == False。所以实际上你只需要检查if result: #pass,因为''和None都评估为False。我会尝试找出选择str(None) == 'None'的一些原因,但如果您只是检查是否返回了正确的字符串,我认为它不会影响您的代码。 -
这只是额外的工作,因为您定义的条件很尴尬:“仅在结果不是 None 或其字符串表示不为空时才处理结果”。使用更传统的检查方式(如@pswaminathan 建议的那样),问题就会消失。
-
如果
foo在失败的情况下返回None,则需要检查None。在您的示例中,任何字符串表示为空的内容显然都与None处理相同,但是没有特别的理由说明这应该是默认行为。问题是,你为什么要使用“str(x) 的长度”作为任何东西的诊断? -
其实我觉得这是一个很好的问题。很容易看出为什么
repr(None)应该是'None',但为什么str(None)不应该是''? -
@BobL:为了记录,Python 在这方面并不是唯一的。例如,在 Java 中,将
null转换为字符串会产生文字字符串"null"。参考:JLS 5.1.11.
标签: python