This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author jesstess
Recipients eric.araujo, erik.bray, jesstess, orsenthil
Date 2014-06-07.04:25:00
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1402115100.76.0.911932777389.issue21463@psf.upfronthosting.co.za>
In-reply-to
Content
I want to state explicitly what the error is for some new contributors who might pick this up at a sprint this weekend:

The issue is that you can't change a dictionary while iterating over it:

>>> d = {"a": "b"}
>>> for elt in d.keys():
...     del d[elt]
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: dictionary changed size during iteration

In Python 2, d.keys() produced a copy of the list of keys, and we delete items from the dictionary while iterating over that copy, which is safe. In Python 3, d.keys() produces a view object* instead, and mutating the dictionary while iterating over it is unsafe and raises an error.

The patch makes a copy of the keys before iterating over it so that it is safe in Python 3.

* https://docs.python.org/3/library/stdtypes.html#dict-views
History
Date User Action Args
2014-06-07 04:25:00jesstesssetrecipients: + jesstess, orsenthil, eric.araujo, erik.bray
2014-06-07 04:25:00jesstesssetmessageid: <1402115100.76.0.911932777389.issue21463@psf.upfronthosting.co.za>
2014-06-07 04:25:00jesstesslinkissue21463 messages
2014-06-07 04:25:00jesstesscreate