can't delete from a dictionary in a loop

Gary Herron gherron at islandtraining.com
Fri May 16 17:40:51 EDT 2008


bruno.desthuilliers at gmail.com wrote:
> On 16 mai, 23:28, Hans Nowak <zephyrfalcon!NO_SP... at gmail.com> wrote:
>   
>> Dan Upton wrote:
>>     
>>> for pid in procs_dict:
>>>   if procs_dict[pid].poll() != None
>>>    # do the counter updates
>>>    del procs_dict[pid]
>>>       
>>> The problem:
>>>       
>>> RuntimeError: dictionary changed size during iteration
>>>       
>> I don't know if the setup with the pids in a dictionary is the best way to
>> manage a pool of processes... I'll leave it others, presumably more
>> knowledgable, to comment on that. :-)  But I can tell you how to solve the
>> immediate problem:
>>
>>    for pid in procs_dict.keys():
>>     

No, keys() produces a list (which is what is wanted here). 

It's iterkeys() that produces an iterator which would reproduce the OP's 
problem.

And then, in Python3, keys() produces something else altogether (call a 
view of the dictionary) which would provoke the same problem, so yet 
another solution would have to be found then.

Gary Herron

>
> I'm afraid this will do the same exact thing. A for loop on a dict
> iterates over the dict keys, so both statements are strictly
> equivalent from a practical POV.
> --
> http://mail.python.org/mailman/listinfo/python-list
>   




More information about the Python-list mailing list