mirror of
https://github.com/python/cpython.git
synced 2025-11-01 10:45:30 +00:00
- Patch 1433928:
- The copy module now "copies" function objects (as atomic objects).
- dict.__getitem__ now looks for a __missing__ hook before raising
KeyError.
- Added a new type, defaultdict, to the collections module.
This uses the new __missing__ hook behavior added to dict (see above).
This commit is contained in:
parent
ab51f5f24d
commit
1968ad32cd
12 changed files with 611 additions and 10 deletions
|
|
@ -395,6 +395,56 @@ class DictTest(unittest.TestCase):
|
|||
else:
|
||||
self.fail("< didn't raise Exc")
|
||||
|
||||
def test_missing(self):
|
||||
# Make sure dict doesn't have a __missing__ method
|
||||
self.assertEqual(hasattr(dict, "__missing__"), False)
|
||||
self.assertEqual(hasattr({}, "__missing__"), False)
|
||||
# Test several cases:
|
||||
# (D) subclass defines __missing__ method returning a value
|
||||
# (E) subclass defines __missing__ method raising RuntimeError
|
||||
# (F) subclass sets __missing__ instance variable (no effect)
|
||||
# (G) subclass doesn't define __missing__ at a all
|
||||
class D(dict):
|
||||
def __missing__(self, key):
|
||||
return 42
|
||||
d = D({1: 2, 3: 4})
|
||||
self.assertEqual(d[1], 2)
|
||||
self.assertEqual(d[3], 4)
|
||||
self.assert_(2 not in d)
|
||||
self.assert_(2 not in d.keys())
|
||||
self.assertEqual(d[2], 42)
|
||||
class E(dict):
|
||||
def __missing__(self, key):
|
||||
raise RuntimeError(key)
|
||||
e = E()
|
||||
try:
|
||||
e[42]
|
||||
except RuntimeError, err:
|
||||
self.assertEqual(err.args, (42,))
|
||||
else:
|
||||
self.fail_("e[42] didn't raise RuntimeError")
|
||||
class F(dict):
|
||||
def __init__(self):
|
||||
# An instance variable __missing__ should have no effect
|
||||
self.__missing__ = lambda key: None
|
||||
f = F()
|
||||
try:
|
||||
f[42]
|
||||
except KeyError, err:
|
||||
self.assertEqual(err.args, (42,))
|
||||
else:
|
||||
self.fail_("f[42] didn't raise KeyError")
|
||||
class G(dict):
|
||||
pass
|
||||
g = G()
|
||||
try:
|
||||
g[42]
|
||||
except KeyError, err:
|
||||
self.assertEqual(err.args, (42,))
|
||||
else:
|
||||
self.fail_("g[42] didn't raise KeyError")
|
||||
|
||||
|
||||
import mapping_tests
|
||||
|
||||
class GeneralMappingTests(mapping_tests.BasicTestMappingProtocol):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue