"[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote: >> >> def __del__ (self): >> >> try: >> >> os.remove (self.name + '.old') >> >> except: >> >> pass >> >> >> And setting: >> >> sys.stderr = logger(...) >> >> >> It seems my cleanup (__del__) is never called, >> ... > > Mmm... If I read the language's references, I see this: > > """ > It is not guaranteed that __del__() methods are called for objects > that still exist when the interpreter exits. > """ > http://docs.python.org/ref/customization.html > > Hopefully you fuond the right way to ensure correct clean-up !-) > > (damn, I knew I rembered something special about destructors... but I > couldn't remember exactly what.) > I don't think you can tell from this description whether the __del__ method was called or not.
Even if sys.stderr is destroyed before Python exits and the __del__ method is called the OP will still get the effect described: the global variables in the module defining logger will have been cleared before stderr is destroyed, so __del__ will simply throw an NameError when trying to access os. -- http://mail.python.org/mailman/listinfo/python-list