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