Kaydet (Commit) 53d2c41f authored tarafından Raymond Hettinger's avatar Raymond Hettinger

Issue #19414: Have the OrderedDict mark deleted links as unusable.

This gives an earlier and more visible failure if a link is deleted
during iteration.
üst 71ac07f8
......@@ -96,6 +96,8 @@ class OrderedDict(dict):
link_next = link.next
link_prev.next = link_next
link_next.prev = link_prev
link.prev = None
link.next = None
def __iter__(self):
'od.__iter__() <==> iter(od)'
......
......@@ -1193,6 +1193,16 @@ class TestOrderedDict(unittest.TestCase):
[t[1] for t in reversed(pairs)])
self.assertEqual(list(reversed(od.items())), list(reversed(pairs)))
def test_detect_deletion_during_iteration(self):
od = OrderedDict.fromkeys('abc')
it = iter(od)
key = next(it)
del od[key]
with self.assertRaises(Exception):
# Note, the exact exception raised is not guaranteed
# The only guarantee that the next() will not succeed
next(it)
def test_popitem(self):
pairs = [('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)]
shuffle(pairs)
......
......@@ -73,6 +73,9 @@ Library
Decimal.quantize() method in the Python version. It had never been
present in the C version.
- Issue #19414: Have the OrderedDict mark deleted links as unusable.
This gives an early failure if the link is deleted during iteration.
- Issue #21421: Add __slots__ to the MappingViews ABC.
Patch by Josh Rosenberg.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment