New submission from João Eiras <joao.ei...@gmail.com>: Given some exception `ex`, you can append data like ex.args += (value1, value2, ...) and then re-raise.
This is something I do in my projects to sometime propagate context when errors are raised, e.g., stacktraces across process boundaries or blobs of text with pickling or unicode errors. When this is done with UnicodeError, the exception becomes non-unpicklable: TypeError: function takes exactly 5 arguments (6 given) Example: import pickle def test_unicode_error_unpickle(): ex0 = UnicodeEncodeError('ascii','message', 1, 2, 'e') ex0.args += ("extra context",) ex1 = pickle.loads(pickle.dumps(ex0)) assert type(ex0).args == type(ex1).args assert ex0.args == ex1.args The issue seems to be UnicodeEncodeError_init() at https://github.com/python/cpython/blob/v3.8.1/Objects/exceptions.c#L1895 and also UnicodeDecodeError_init(). The BaseException is initialized, but then Unicode*Error_init() tries to reparse the arguments and does not tolerate extra values. This because BaseException.__reduce__ return a tuple (class,args). ---------- components: Interpreter Core files: test_unicode_error_unpickle.py messages: 362648 nosy: João Eiras priority: normal severity: normal status: open title: UnicodeError becomes unpicklable if data is appended to args type: behavior versions: Python 3.8 Added file: https://bugs.python.org/file48914/test_unicode_error_unpickle.py _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue39750> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com