dumping in destructor

Митя netimen at gmail.com
Mon Oct 20 08:01:07 EDT 2008


Thank you for your answers!

my g_register is a global object, and it lives all the program's
lifetime, so 'with' is not appliable. Am I right?

I tried to use atexit and wrote following:

class _Register(object):
   def dump(self):
         ....

class Registerable(object):
   ....

g_register = _Register()
atexit.register(g_register.dump)
...
...
g_register.add(Registerable('aa'))

But now I get:

cPickle.PicklingError: Can't pickle <class '__main__.Registerable'>:
attribute lookup __main__.Registerable failed

Does that mean that by the time of atexit execution my Registerable
class is already dead?


Michele Simionato wrote:
> On Oct 20, 10:12�am, ���� <neti... at gmail.com> wrote:
> > But when g_register is being destroyed, dump seems to be already dead,
> > so I get:
> >
> > Exception exceptions.TypeError: "'NoneType' object is not callable" in
> > <bound method __Register.__del__ of <MyWiki.Register.__Register object
> > at 0x835a74c>> ignored
> >
> > can I somehow save my data from destructor?
>
> The best thing is to use the 'with' statement, but it requires you to
> rewrite all
> of your code. Alternatively you can use the atexit module. I wrote
> once a
> recipe that may be of interest to you:
>
> http://code.activestate.com/recipes/523007/



More information about the Python-list mailing list