>>> set(None) *** TypeError: 'NoneType' object is not iterable
是一个问题但不是这个问题:
>>> a=set() >>> a.add(None)
为什么?
答案 0 :(得分:13)
正如错误消息所示,set()
期望可迭代。
set([None])
注意:list
,tuple
,...
答案 1 :(得分:3)
因为set初始化器接受一个必须可迭代的对象,但add()只要其hashable就可以使用任何元素。由于NoneType不可迭代,因此会引发异常。
上课
set([iterable])
返回一个新的set或frozenset对象,其元素取自iterable。 集合的元素必须是 哈希的。要表示集合集,内部集必须是冻结集 对象。如果未指定iterable,则返回一个新的空集。
add(elem)
将元素elem添加到集合中。iterable
一个能够一次返回其成员的对象。迭代的例子包括所有序列类型(例如列表, str和tuple)以及一些非序列类型,如dict和file 您使用__iter__()
或__getitem__()
定义的任何类的对象 方法。 Iterables可用于for循环和许多其他地方 需要序列的地方(zip(),map(),...)。当一个可迭代的 object作为参数传递给内置函数iter(),它 返回对象的迭代器。这个迭代器适用于一次通过 超过这组价值观。使用iterables时,通常不会 必须调用iter()或自己处理迭代器对象。该 for语句为您自动执行,创建临时 用于在循环期间保存迭代器的未命名变量。 另请参见迭代器,序列和生成器。
In [18]: hash(None)
Out[18]: 39746304
In [19]: iter(None)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/jon/<ipython console> in <module>()
TypeError: 'NoneType' object is not iterable
In [21]: dir(None)
Out[21]:
['__class__',
'__delattr__',
'__doc__',
'__format__',
'__getattribute__',
'__hash__',
'__init__',
'__new__',
'__reduce__',
...
'__subclasshook__']
In [22]: dir([])
Out[22]:
[...
'__hash__',
'__getitem__',
...
'__iter__',