diff -r d489394a73de Python/modsupport.c --- a/Python/modsupport.c Tue Dec 17 15:12:46 2013 +0200 +++ b/Python/modsupport.c Thu Dec 19 12:10:35 2013 +0100 @@ -161,7 +161,17 @@ do_mktuple(const char **p_format, va_lis /* Note that we can't bail immediately on error as this will leak refcounts on any 'N' arguments. */ for (i = 0; i < n; i++) { - PyObject *w = do_mkvalue(p_format, p_va, flags); + PyObject *w; + + if (itemfailed) { + PyObject *exception, *value, *tb; + PyErr_Fetch(&exception, &value, &tb); + w = do_mkvalue(p_format, p_va, flags); + PyErr_Restore(exception, value, tb); + } + else { + w = do_mkvalue(p_format, p_va, flags); + } if (w == NULL) { itemfailed = 1; Py_INCREF(Py_None);