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