Несколько раз (даже несколько подряд) я был укушен ошибкой defaultdict: забыл, что что-то на самом деле является defaultdict, и относился к нему как к обычному словарю.
d = defaultdict(list)
...
try:
v = d["key"]
except KeyError:
print "Sorry, no dice!"
Для тех, кто был укушен, проблема очевидна: когда у d нет ключа 'key', v = d["key"]
волшебным образом создает пустой список и назначает его как d["key"]
, так и v
вместо вызова исключение. Это может быть довольно трудно отследить, если d прибывает из некоторого модуля, детали которого вы не очень хорошо помните.
Я ищу способ избавиться от этой ошибки. Для меня лучшим решением было бы как-то отключить магию по умолчанию, прежде чем вернуть ее клиенту.