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

时间:2013-03-03 21:38:45

标签: python list exception 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'

2 个答案:

答案 0 :(得分:7)

因为setsdict很相似,但没有值:

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

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

答案 1 :(得分:7)

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