New submission from Terry J. Reedy <tjre...@udel.edu>: Tool/scripts/find_recursionlimit.py includes test_cpickle() which, like the other test_xxx functions, is supposed to raise a RuntimeError when the recursion limit is reached. It appears to work correctly on 3.1 and I presume previously. On 3.2, test_cpickle() hangs. Here is much reduced code that shows the behavior:
import itertools import io import _pickle # extracted from 'def test_cpickle' and condensed: l = None for n in itertools.count(): try: raise KeyError except KeyError: for i in range(100): l = [l] print(n,i) _pickle.Pickler(io.BytesIO(), protocol=-1).dump(l) The added print line prints 0,99 1,99, ... indefinitely. If the recursive list l is added to the print function, the attempt to create repr(l) raises a runtime error at n = 9. If we remove the try-except part: l = None for n in itertools.count(): for i in range(100): l = [l] print(n,i) _pickle.Pickler(io.BytesIO(), protocol=-1).dump(l) *pickle* now raises a RuntimeError, as expected in the original context, at n=4! 1. I do not actually know which behavior is buggy. I suppose the next step would be to capture and not toss the pickle output to see what is the difference. 2. At least for the present, I think the call to test_cpickle should be commented out in find_recursionlimit.py. There seems to be other pickle and recursive structure issues, like #9269, but I did not see any the same as this. ---------- files: frl_pickle1.py messages: 126874 nosy: belopolsky, pitrou, terry.reedy priority: normal severity: normal status: open title: Bizarre pickle -- exception interaction bug type: behavior versions: Python 3.2 Added file: http://bugs.python.org/file20489/frl_pickle1.py _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue10987> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com