RuntimeError: dictionary changed size during iteration
Steven D'Aprano
steven at REMOVE.THIS.cybersource.com.au
Mon Dec 8 23:00:21 EST 2008
On Mon, 08 Dec 2008 19:10:00 -0800, Robert Dailey wrote:
> On Dec 8, 6:26 pm, Terry Reedy <tjre... at udel.edu> wrote:
>> Robert Dailey wrote:
>> > stuff = vars()
>>
>> >>> vars() is globals()
>> True
>>
>> > for key in stuff:
>>
>> You just changed globals, which is aliased as stuff. Stuff changes.
>>
>> > print( key, '--', stuff[key] )
>>
>> > I get the following error message:
>> > ('CopyEmotionFX', '--', <function CopyEmotionFX at 0x0205BF70>)
>> > Traceback (most recent call last):
>> > File "C:\IT\work\jewett\depends.py", line 12, in <module>
>> > for key in stuff:
>> > RuntimeError: dictionary changed size during iteration
>>
>> > Why is this happening?
>>
>>
>>
> How am I changing globals()? I'm simply iterating the keys in the dict.
> Can someone explain what is going on please?
You create an new name "key":
for key in stuff
I suppose you could do this:
key = None
stuff = vars()
for key in stuff:
but even better would be:
for key in vars().copy():
because that protects you from cases where globals() change inside the
for loop.
--
Steven
More information about the Python-list
mailing list