On Jun 4, 9:47 am, Peter Otten <__pete...@web.de> wrote: > I can provoke the error in "naked" Python 3 by changing the > Example.__module__ attribute: > > Python 3.1.1+ (r311:74480, Nov 2 2009, 15:45:00) > [GCC 4.4.1] on linux2 > Type "help", "copyright", "credits" or "license" for more information.
> >>> import pickle > >>> class Example: > > ... pass > ... > >>> pickle.dumps(Example()) > > b'\x80\x03c__main__\nExample\nq\x00)\x81q\x01}q\x02b.' > >>> Example.__module__ = "builtins" > >>> pickle.dumps(Example()) > > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > File "/usr/lib/python3.1/pickle.py", line 1358, in dumps > Pickler(f, protocol, fix_imports=fix_imports).dump(obj) > _pickle.PicklingError: Can't pickle <class 'Example'>: attribute lookup > builtins.Example failed > > What's the value of __module__ when you run your code in Eclipse? > > Peter Thank you for replying. Here's from Eclipse console: >>> Example.__module__ 'builtins' >>> __name__ 'builtins' Duplicating your result in naked Python: Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] on win32 Type "copyright", "credits" or "license()" for more information. >>> class Example: pass >>> import pickle >>> Example.__module__ '__main__' >>> f = open('testpickle.pkl','wb') >>> obj = Example() >>> obj <__main__.Example object at 0x02A26690> >>> pickle.dump(obj, f) >>> Example.__module__ = 'builtins' >>> obj2 = Example() >>> pickle.dump(obj2, f) Traceback (most recent call last): File "<pyshell#12>", line 1, in <module> pickle.dump(obj2, f) File "C:\Python31\lib\pickle.py", line 1354, in dump Pickler(file, protocol, fix_imports=fix_imports).dump(obj) _pickle.PicklingError: Can't pickle <class 'Example'>: attribute lookup builtins.Example failed So what if I'm in an Eclipse pydev console and change the Example.__module__ to '__main__'.... >>> import sys; print('%s %s' % (sys.executable or sys.platform, sys.version)) C:\Python31\python.exe 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] >>> import pickle >>> class Example: ... pass ... >>> Example.__module__ 'builtins' >>> Example.__module__ = '__main__' >>> obj = Example() >>> obj <__main__.Example object at 0x029E8FD0> >>> f = open('testpickle.pkl','wb') >>> pickle.dump(obj, f) Traceback (most recent call last): File "<console>", line 1, in <module> File "C:\Python31\lib\pickle.py", line 1354, in dump Pickler(file, protocol, fix_imports=fix_imports).dump(obj) _pickle.PicklingError: Can't pickle <class '__main__.Example'>: attribute lookup __main__.Example failed >>> Dang. Any insights? Kirby -- http://mail.python.org/mailman/listinfo/python-list