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