kirby.ur...@gmail.com wrote: > 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?
Sorry, no. Consider a bug report to the pydev project. Peter -- http://mail.python.org/mailman/listinfo/python-list