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