Jessica McKellar added the comment:

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

----------
nosy: +jesstess

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue21463>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to