Terry J. Reedy added the comment: Code is really a code object, so the compile does not seem to be the problem. In 2.7, on Win7, I get exactly the same output after removing the possibly spurious space in the string posted. (ppperry), what system (OS) are you using. (In the future, please report both system and Python version).
3.4 gives a mild variation b'\x80\x03cidlelib.rpc\nunpickle_code\nq\x00CZ\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00@\x00\x00\x00s\x08\x00\x00\x00e\x00\x00\x01d\x00\x00S)\x01N)\x01Z\ndummy_code\xa9\x00r\x01\x00\x00\x00r\x01\x00\x00\x00z\x06<test>\xda\x08<module>\x01\x00\x00\x00s\x00\x00\x00\x00q\x01\x85q\x02Rq\x03.' I ran both test_pickle and test_pickletools from both the command line >python -m test -v test_pickletools and from an Idle editor with F5, with no errors and apparently identical output. import pickle code = compile("dummy_code", "this is a file name", "exec") print(type(code)) print('pickle: ', pickle.dumps(code)) >>> produces <class 'code'> pickle: b'\x80\x03cidlelib.rpc ... \x13this is a file name\...' which shows that the bytes come from picke, not from a garbled traceback. Since the bytes look like an actual pickle, I tried unpickling and it works: import pickle code = compile("'a string'", "", "eval") pick = pickle.dumps(code) code2 = pickle.loads(pick) print(eval(code), eval(code2)) >>> a string a string import pickle code1 = compile("print('a string')", "", "exec") pick = pickle.dumps(code1) code2 = pickle.loads(pick) exec(code1) exec(code2) >>> a string a string I do not see any Idle bug here, so this might be closed unless you want to make this a pickle enhancement issue to work on code objects in the standard interpreter. The 3.4 interpreter traceback gives more info on why the pickle fails there. >>> code0 = compile("'abc'", '', 'eval') >>> pick = pickle.dumps(code0) Traceback (most recent call last): File "<stdin>", line 1, in <module> _pickle.PicklingError: Can't pickle <class 'code'>: attribute lookup code on builtins failed In Idle, __builtins__.code fails, just as in the interpreter, so pickle is doing something different, and more successful, in the slightly altered Idle user-process execution environment. ---------- components: +Library (Lib) -IDLE nosy: +pitrou stage: -> needs patch versions: +Python 2.7, Python 3.4, Python 3.5 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue21986> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com