>>> set(None) *** TypeError: 'NoneType' object is not iterable
是一個問題,但不是這個:爲什麼設置(無)在python無效
>>> a=set() >>> a.add(None)
爲什麼?
>>> set(None) *** TypeError: 'NoneType' object is not iterable
是一個問題,但不是這個:爲什麼設置(無)在python無效
>>> a=set() >>> a.add(None)
爲什麼?
由於錯誤消息告訴你,set()
預計可迭代。
set([None])
注:同樣適用於list
,tuple
,......只要
我一整天都在問愚蠢的問題,我的香菸在哪裏 –
不是一個愚蠢的問題伊莫。無論如何,我學到了東西!直到我看到這個問題,才知道NoneType是可散列的,所以謝謝@EknathIyer :)。 – chown
由於集合初始化需要一個對象,它必須是可迭代的,但增加()將採取任何元素作爲其可哈希。由於NoneType不可迭代,因此會引發異常。
類
set([iterable])
返回一組新的或frozenset對象,其元素從迭代採取。 一組元素必須是 可哈希。爲了表示集合集,內部集合必須被凍結集合 對象。如果未指定iterable,則返回一個新的空集。
add(elem)
將元素elem添加到集合中。iterable
一個對象能夠一次返回一個成員。迭代示例包括所有序列類型(例如列表, str和元組)以及一些非序列類型(如字典和文件)以及使用__iter__()
或__getitem__()
方法定義的任何類的對象。 Iterables可以用在for循環中以及需要序列的許多其他地方 (zip(),map(),...)。當可迭代的 對象作爲參數傳遞給內建函數iter()時,它將返回該對象的迭代器。這個迭代器對於該組值是一次傳遞 。在使用迭代器時,通常不需要調用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__',
我傾向於同意你的看法。沒有人應該被視爲空的元素,只是不添加沒有拋出一個錯誤。 – Colin