Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Different exceptions for pop from empty sets and lists?

Why do empty sets and lists raise different exceptions when you call .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'
like image 256
Joschua Avatar asked Mar 03 '13 21:03

Joschua


2 Answers

Because sets are a lot like dicts but without the values:

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

Both dictionaries and sets are not indexed, like lists are, so an IndexError makes no sense here. But like dictionaries, there is only ever one value of each 'key' in the set.

like image 75
Martijn Pieters Avatar answered Oct 22 '22 23:10

Martijn Pieters


Lists are ordered sequences, accessed by index; sets are unordered and non-sequential, accessed by key, hence the error messages.

like image 41
Tim Pietzcker Avatar answered Oct 23 '22 00:10

Tim Pietzcker