Index: Python/errors.c =================================================================== --- Python/errors.c (révision 65930) +++ Python/errors.c (copie de travail) @@ -66,6 +66,8 @@ if (tstate->exc_value != NULL && tstate->exc_value != Py_None) { /* Implicit exception chaining */ if (value == NULL || !PyExceptionInstance_Check(value)) { + PyObject *exc_value_copy; + /* We must normalize the value right now */ PyObject *args, *fixed_value; if (value == NULL || value == Py_None) @@ -76,8 +78,19 @@ } else args = PyTuple_Pack(1, value); + + exc_value_copy = tstate->exc_value; + Py_INCREF(exc_value_copy); + fixed_value = args ? PyEval_CallObject(exception, args) : NULL; + + Py_DECREF(exc_value_copy); + if (tstate->exc_value != exc_value_copy) { + Py_XDECREF(tstate->exc_value); + tstate->exc_value = exc_value_copy; + } + Py_XDECREF(args); Py_XDECREF(value); if (fixed_value == NULL)