John schrieb:
> Hi there,
> 
> I have a rather lengthy program that troubles me for quite some time. After 
> some debugging, I arrived at the following assertion error:
> 
> for e in edges.keys():
>       assert edges.has_key(e)
> 
> Oops!? Is there ANY way that something like this can possibly happen?

Yes, it happens when another part of your program -- most likely a
thread -- modifies edges while you are iterating over its keys. The
keys() method of a dict returns a *copy* of its keys. If you had uses
"for e in edges" you'd have seen a RuntimeError "dictionary changed size
during iteration". With keys() you see the snapshot of edges's keys when
keys() is called.

Christian

PS: Use "e in edges" instead of "edges.has_key(e)". It's faster.

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to