This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author slallum
Recipients alexandre.vassalotti, georg.brandl, jaraco, sbt, slallum, zseil
Date 2018-01-28.16:15:55
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1517156155.35.0.467229070634.issue32696@psf.upfronthosting.co.za>
In-reply-to
Content
Pickling exceptions fails when a custom exception class requires multiple arguments.

import pickle
class MultipleArgumentsError(Exception):
    def __init__(self, a, b):
        self.a = a
        self.b = b

pickle.loads(pickle.dumps(MultipleArgumentsError('a', 'b')))

this code produces the following error:

Traceback (most recent call last):
  File "/tmp/multiple_arguments_exception.py", line 8, in <module>
    pickle.loads(pickle.dumps(MultipleArgumentsError('a', 'b')))
  File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1388, in loads
    return Unpickler(file).load()
  File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 864, in load
    dispatch[key](self)
  File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1139, in load_reduce
    value = func(*args)
TypeError: __init__() takes exactly 3 arguments (2 given)


The same error occurs when using a built-in module like subprocess:
>>> import subprocess, pickle
>>> try:
...   subprocess.check_call(['python', '-c', 'raise SystemExit(1)'])
... except Exception as e:
...   pickle.loads(pickle.dumps(e))
... 


Related issue: https://bugs.python.org/issue1692335
History
Date User Action Args
2018-01-28 16:15:55slallumsetrecipients: + slallum, georg.brandl, jaraco, zseil, alexandre.vassalotti, sbt
2018-01-28 16:15:55slallumsetmessageid: <1517156155.35.0.467229070634.issue32696@psf.upfronthosting.co.za>
2018-01-28 16:15:55slallumlinkissue32696 messages
2018-01-28 16:15:55slallumcreate