From: Eric F. <ef...@ha...> - 2009-09-19 03:03:11
|
Ryanitus wrote: > I may have found a bug in the __setitem__ method of the maxdict class. > Fixed--thanks for pointing it out. Eric > Since a dictionary is a mapping class, if an item is set that already > exists, it overwrites the previous. However, you are still appending that > item to _killkeys regardless. > > In the case where 2 items with the same key were added and later removed due > to size constraints, the line in bold would throw an exception on the second > call. > > By checking for the key existance, you handle that situation gracefully. > The item can still be removed from _killkeys, since it's the next to go > anyway. > > Ryan > > Original code (circa line 776): > > if len(self)>=self.maxsize: > del self[self._killkeys[0]] > del self._killkeys[0] > dict.__setitem__(self, k, v) > self._killkeys.append(k) > > Possible solution: > > if len(self)>=self.maxsize: > if self.has_key(self._killkeys[0]): > del self[self._killkeys[0]] > del self._killkeys[0] > dict.__setitem__(self, k, v) > self._killkeys.append(k) > > > |