[Python-Dev] Proposal: defaultdict

Adam Olsen rhamph at gmail.com
Sat Feb 18 02:29:34 CET 2006


On 2/17/06, "Martin v. Löwis" <martin at v.loewis.de> wrote:
> Adam Olsen wrote:
> > You could pass a float in as well.  But if the function is documented
> > as taking a dict, and the programmer expects a dict.. that now has to
> > be changed to "dict without a default".  Or they have to code
> > defensively since d[key] may or may not raise KeyError, so they must
> > avoid depending on it either way.
>
> Can you give an example of real, existing code that will break
> if a such a dict is passed?

I only got halfway through the "grep KeyError" results, but..

Demo/metaclass/Meta.py:55
Demo/tkinter/guido/AttrDialog.py:121  # Subclasses override self.classes
Lib/ConfigParser.py:623
Lib/random.py:315
Lib/string.py:191
Lib/weakref.py:56  # Currently uses UserDict but I assume it will
switch to dict eventually

And the pièce de résistance..
Doc/tools/anno-api.py:51

It has this:
    try:
        info = rcdict[s]
    except KeyError:
        sys.stderr.write("No refcount data for %s\n" % s)
    else:
        ...
rcdict is loaded from refcounts.load().  refcounts.load() calls
refcounts.loadfile(), which has this (inside a loop):
    try:
        entry = d[function]
    except KeyError:
        entry = d[function] = Entry(function)
A prime candidate for a default.

Perhaps the KeyError shouldn't ever get triggered in this case, I'm
not sure.  I think that's besides the point though.  The programmer
clearly expected it would.

--
Adam Olsen, aka Rhamphoryncus


More information about the Python-Dev mailing list