From 8f4ec8d3ef9a75d7238c93cb55fdfcd0fe4ddc02 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 5 Sep 2014 01:10:29 +0200 Subject: [PATCH] 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. --- Objects/abstract.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Objects/abstract.c b/Objects/abstract.c index 783a83c3ed0..ec599723ac6 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"))