diff -r 965109e81ffa Objects/abstract.c --- a/Objects/abstract.c Wed Nov 04 22:38:40 2015 +0200 +++ b/Objects/abstract.c Thu Nov 05 10:47:56 2015 +0100 @@ -141,8 +141,11 @@ PyObject_GetItem(PyObject *o, PyObject * return null_error(); m = o->ob_type->tp_as_mapping; - if (m && m->mp_subscript) - return m->mp_subscript(o, key); + if (m && m->mp_subscript) { + PyObject *item = m->mp_subscript(o, key); + assert((item != NULL) ^ (PyErr_Occurred() != NULL)); + return item; + } if (o->ob_type->tp_as_sequence) { if (PyIndex_Check(key)) { @@ -1526,8 +1529,10 @@ PySequence_GetItem(PyObject *s, Py_ssize if (i < 0) { if (m->sq_length) { Py_ssize_t l = (*m->sq_length)(s); - if (l < 0) + if (l < 0) { + assert(PyErr_Occurred()); return NULL; + } i += l; } } diff -r 965109e81ffa Python/ceval.c --- a/Python/ceval.c Wed Nov 04 22:38:40 2015 +0200 +++ b/Python/ceval.c Thu Nov 05 10:47:56 2015 +0100 @@ -2307,7 +2307,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int } else { v = PyObject_GetItem(locals, name); - if (v == NULL && _PyErr_OCCURRED()) { + if (v == NULL) { if (!PyErr_ExceptionMatches(PyExc_KeyError)) goto error; PyErr_Clear(); @@ -2363,6 +2363,10 @@ PyEval_EvalFrameEx(PyFrameObject *f, int /* Slow-path if globals or builtins is not a dict */ v = PyObject_GetItem(f->f_globals, name); if (v == NULL) { + if (!PyErr_ExceptionMatches(PyExc_KeyError)) + goto error; + PyErr_Clear(); + v = PyObject_GetItem(f->f_builtins, name); if (v == NULL) { if (PyErr_ExceptionMatches(PyExc_KeyError)) @@ -2422,7 +2426,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int } else { value = PyObject_GetItem(locals, name); - if (value == NULL && PyErr_Occurred()) { + if (value == NULL) { if (!PyErr_ExceptionMatches(PyExc_KeyError)) goto error; PyErr_Clear();