From: Victor Stinner Date: Thu, 4 Sep 2014 23:10:29 +0000 (+0200) Subject: Issue #22290: PyObject_Call() now fails with an assertion error when called X-Git-Tag: v3.5.0a1~958 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8f4ec8d3ef9a75d7238c93cb55fdfcd0fe4ddc02;p=python Issue #22290: PyObject_Call() now fails with an assertion error when called with an exception set. This new assertion helps to understand if the exception was already set before calling the function or raised by the function. --- diff --git a/Objects/abstract.c b/Objects/abstract.c index 783a83c3ed..ec599723ac 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -2074,6 +2074,11 @@ PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { ternaryfunc call; + /* PyObject_Call() must not be called with an exception set, + because it may clear it (directly or indirectly) and so the + caller looses its exception */ + assert(!PyErr_Occurred()); + if ((call = func->ob_type->tp_call) != NULL) { PyObject *result; if (Py_EnterRecursiveCall(" while calling a Python object"))