【发布时间】:2015-07-27 06:00:01
【问题描述】:
None 在 Python 中是一个对象。
>>> isinstance(None, object)
True
因此它可以使用像 __str__() 这样的函数
>>> str(None)
'None'
但是为什么它对 __len__() 不做同样的事情呢?
>>> len(None)
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
len(None)
TypeError: object of type 'NoneType' has no len()
这似乎是 Pythonic,就像 if list 是可以接受的一样,即使变量是 None 而不仅仅是一个空列表。
是否存在使len(None) 的使用更成问题的情况?
【问题讨论】:
-
因为
None没有__len__;不是Sized。 -
@jonrsharpe 但它可能只是添加了一个无论如何都返回 0 的函数。
-
可以,但没有多大意义。为什么一个对象有一个长度,除非它是一个对象的集合?
-
如果您有可能获得
None或list的情况,您应该先测试if what_i_think_is_a_list is not None:,然后再将其视为列表。所有内置类型都有真实性,但有很多操作在None上毫无意义(你也不能迭代它)。为None实现len只会隐藏应捕获的错误。 -
None没有长度,原因与整数和浮点数没有长度相同。 这不是一个集合。它不能变长或变短。