2013-03-03 3 views
5

.pop()を呼び出すと、空のセットとリストで異なる例外が発生するのはなぜですか?空のセットとリストからのポップの例外は何ですか?

>>> l = [] 
>>> l.pop() 
Traceback (most recent call last): 
    File "<pyshell#15>", line 1, in <module> 
    l.pop() 
IndexError: pop from empty list 
>>> l = set() 
>>> l.pop() 
Traceback (most recent call last): 
    File "<pyshell#17>", line 1, in <module> 
    l.pop() 
KeyError: 'pop from an empty set' 

答えて

7

setsがたくさんdictのようですが、値なしなので:

>>> d = {} 
>>> d.pop('foo') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
KeyError: 'pop(): dictionary is empty' 

両方の辞書とセットは、リストがあるように、インデックス付きなので、IndexErrorは、ここでは意味がありませんされていません。しかし、辞書のように、セット内の各「キー」の値は1つだけです。

+0

数秒で私を殴る! – inspectorG4dget

+0

ディクショナリが空であるかどうかにかかわらず、 'dict.pop({key value}) 'に与えられたキーが存在しないときに' KeyError'を得ることは確かに意味がありますが、 'set.pop () 'を引数として受け付けません。私の推測では、Python 2.3で導入された['sets'](http://docs.python.org/2/library/sets.html)モジュールの' Set'クラスと互換性があり、辞書を使って実装されていますドキュメントに従って。 – martineau

+0

@martineau: '.remove()'も 'KeyError'を送出します。 [this commit](http://hg.python.org/cpython/file/3086620db46b/Objects/setobject.c)によれば、 'dict.pop()' *の後ろに明示的にモデル化されています。 –

7

リストはインデックスでアクセスされる順序付けられたシーケンスです。セットは順序付けされておらず、キーによってアクセスされる非シーケンシャルなので、エラーメッセージ。

関連する問題