[Python-Dev] Proposal: defaultdict (original) (raw)
"Martin v. Löwis" martin at v.loewis.de
Sat Feb 18 09:08:00 CET 2006
- Previous message: [Python-Dev] Proposal: defaultdict
- Next message: [Python-Dev] Proposal: defaultdict
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Adam Olsen wrote:
Demo/metaclass/Meta.py:55
That wouldn't break. If you had actually read the code, you would have seen it is
try:
ga = dict['__getattr__']
except KeyError:
pass
How would it break if dict had a default factory? ga would get the getattr value, and everything would be fine. The KeyError is ignored, after all.
Demo/tkinter/guido/AttrDialog.py:121 # Subclasses override self.classes
Hmm
try:
cl = self.classes[c]
except KeyError:
cl = 'unknown'
So cl wouldn't be 'unknown'. Why would that be a problem?
Lib/ConfigParser.py:623
try:
v = map[var]
except KeyError:
raise InterpolationMissingOptionError(
option, section, rest, var)
So there is no InterpolationMissingOptionError. Of course not. The whole point would be to provide a value for all interpolation variables.
Lib/random.py:315
This entire functions samples k elements with indices between 0 and len(population). Now, people "shouldn't" be passing dictionaries in in the first place; that specific code tests whether there valid values at indices 0, n//2, and n. If the dictionary isn't really a sequence (i.e. if it doesn't provide values at all indices), the function may later fail even if it passes that test.
With a default-valued dictionary, the function would not fail, but a large number of samples might be the default value.
Lib/string.py:191
Same like ConfigParser: the intperpolation will always succeed, interpolating all values (rather than leaving $identifier in the string). That would be precisely the expected behaviour.
Lib/weakref.py:56 # Currently uses UserDict but I assume it will switch to dict eventually
Or, rather, UserDict might grow the on_missing feature as well.
That is irrelevant for this issue, though:
o = self.data[key]()
if o is None:
raise KeyError, key # line 56
else:
return o
So we are looking for lookup failures in self.data, here: self.dict is initialized to {} in UserDict, with no default factory. So there cannot be a change in behaviour.
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.
No. I now see your problem: An "except KeyError" does not mean that the programmer "clearly expects it will" raise an KeyError. Instead, the programmer expects it might raise a KeyError, and tries to deal with this situation.
If the situation doesn't arise, the code continue just fine.
Regards, Martin
- Previous message: [Python-Dev] Proposal: defaultdict
- Next message: [Python-Dev] Proposal: defaultdict
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]