John wrote:
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?

Three ways that I can think of. Doubtless there are more.

1) Mutating the dictionary within the loop:

edges = dict.fromkeys (range (10))
for e in edges.keys ():
 assert edges.has_key (e), "edges does not have %s" % e
 del edges[e + 1]


2) A race condition (sort of generalisation of (1)): some other thread removes something from edges during the iteration


3) edges isn't a dictionary but a dictalike structure which
doesn't do what you expect for .keys and .has_key.

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

Reply via email to