You are calling *two* times destroy (in bullet update) ?[line 412]Â self.shooter.game.bullets[i].destroy() # one
 self.destroy() # two
Why are you storing stuff by id() in a dictionary in the first place? When would you want to look something up by it's id() when you wouldn't want just to have a reference (possible a weakref) to the object itself?
(I ask because it seems like doing what you are doing would be a big ol' error prone hassle and waste of your time compared to other more commonly used techniques in python, but I can't figure out exactly what problem that dictionary approach was originally conceived of as a solution for)
On Mon, Jul 12, 2010 at 9:25 AM, éæå <onpon4@xxxxxxxxx<mailto:onpon4@xxxxxxxxx>> wrote:
 ÂIn my game that I'm working on, Senso (which is my first game in
 ÂPygame), there is a main game class, Game, which handles things on
 Âthe global level. One thing it does is store each instance of game
 Âobjects in dictionaries, with the dictionary keys being each
 Âinstance's memory address, grabbed with id(). When an instance needs
 Âto be removed, part of the process involves removing the dictionary
 Âreference of the instance, by calling "del
 Âgame.myclassdict[id(self)]" (replacing "myclassdict" with the actual
 Âname of the correct dictionary). This seems to cause a problem:
 Âsometimes, this action seems to reference a nonexistant key in the
 Ârespective dictionary. I've only experienced it with bullets. I've
 Âchecked and double-checked the code, and it doesn't seem that at any
 Âpoint I forget to add an instance to the dictionary.
Like Brian Fisher wrote, you probably shouldn't be storing references this way, since there doesn't seem to be a good reason for it. (We got into a fun discussion once about "bullet theology". Should bullet objects be destroyed or recycled when their time runs out?)
My guess is that you're experiencing a problem with Pygame's "garbage collection" system, which destroys objects once there are no more references to them. Maybe Python is destroying your object's ID reference before the deletion command is fully carried out, causing the id() command to fail?