diff -r bc1a178b3bc8 Objects/genobject.c --- a/Objects/genobject.c Sat Apr 18 05:54:02 2015 +0200 +++ b/Objects/genobject.c Sat Apr 18 21:43:06 2015 +0200 @@ -396,13 +396,21 @@ if (PyErr_ExceptionMatches(PyExc_StopIteration)) { PyErr_Fetch(&et, &ev, &tb); - Py_XDECREF(et); - Py_XDECREF(tb); if (ev) { + if (!PyObject_IsInstance(ev, PyExc_StopIteration)) { + /* normalisation wasn't done yet -> do it now! */ + PyErr_NormalizeException(&et, &ev, &tb); + if (!PyObject_IsInstance(ev, PyExc_StopIteration)) { + PyErr_Restore(et, ev, tb); + return -1; + } + } value = ((PyStopIterationObject *)ev)->value; Py_INCREF(value); Py_DECREF(ev); } + Py_XDECREF(et); + Py_XDECREF(tb); } else if (PyErr_Occurred()) { return -1; }