I'm running Python 2.5.4 on Debian Sid.

If anybody understands the error please enlighten me.

Very interesting! Here is a minimalist version:

import pickle
class PickleTest:
   def __init__(self):
       self.library={u"A": 1,u"B": 2,u"C": 3}
   def __del__(self):
       self.pickle()
   def pickle(self):
       pickle.dumps(self.library)
pt=PickleTest()

However, the exception is not thrown if dictionary keys are not unicodes. cPickle version is even more strange:

import cPickle
class PickleTest:
   def __init__(self):
       self.library={u"A": 1,u"B": 2,u"C": 3}
   def __del__(self):
       self.pickle()
   def pickle(self):
       cPickle.dumps(self.library)

pt=PickleTest()

Result:

Exception AttributeError: "'NoneType' object has no attribute 'dumps'" in <bound method PickleTest.__del__ of <__main__.PickleTest instance at 0x00CC1F08>> ignored

Of course the error is gone if you do this:

if __name__ == "__main__":
   pt=PickleTest()
del pt # No more references to object, will be destroyed before the main program starts exiting.

You should NOT write files from object destructors anyway. You can never know when an object willl be destroyed. The correct way to implement this is to put it in try - finally

pt=PickleTest()
try:
   do_something_with(pt)
finally:
   pt.pickle()

Best.

  Laszlo





--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to