The following code causes [Mac]Python 2.3 process to crash (Bad!) rather than raise an error (good) when creating a new instance of Foo: class Foo: def __init__(self): self.x = 1 def __getattr__(self, name): if self.x: pass # etc... def __setattr__(self, name, val): if self.x: pass # etc... (See <http://freespace.virgin.net/hamish.sanderson/ HTMLTemplate-0.4.0.tar.gz> for a working example plus general solution to the referencing-instance-var-before-it's-created paradox that threw up this bug in the first place.)
Logged In: YES user_id=89016 Assigning to self.x in __init__() calls __setattr__(), which checks self.x, which calls __getattr__() which checks self.x, which leads to endless recursion. This usually leads to a "RuntimeError: maximum recursion depth exceeded". In what way does Python 2.3 crash? To avoid the recursion access the instance dictionary directly: class Foo: def __init__(self): self.x = 1 def __getattr__(self, name): if "x" in self.__dict__ and self.__dict__["x"]: pass # etc... def __setattr__(self, name, val): if self.x: pass # etc...
Logged In: YES user_id=996627 Original test used a framework build of Python 2.3.x on Mac OS X 10.2.8; I've upgraded to OS 10.4.4 since and can't reproduce the problem on that - I get the standard recursion error as expected. I've no further insights into why I had problems originally and no-one else seems to have reproduced it, so probably best just to close it. Sorry not to be of more help.