从空集和列表中弹出的不同例外?

Jos*_*hua 5 python exception list set

为什么在调用.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'
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 7

因为sets很像dicts但没有值:

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

字典和集合都没有编入索引,就像列表一样,所以IndexError这里没有任何意义.但是就像字典一样,集合中每个"键"只有一个值.


Tim*_*ker 7

列表是有序序列,通过索引访问; 集合是无序的和非顺序的,由密钥访问,因此是错误消息.