]> granicus.if.org Git - python/commitdiff
Issue #18408: Py_ReprLeave() now saves/restores the current exception,
authorVictor Stinner <victor.stinner@gmail.com>
Tue, 16 Jul 2013 20:24:44 +0000 (22:24 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Tue, 16 Jul 2013 20:24:44 +0000 (22:24 +0200)
and ignores exceptions raised during the call

Objects/object.c

index d382a3c157a27acddf70e7ff7e313b63c282f6f0..700e8bef56892950088b70e93b16bfd4fb9f4404 100644 (file)
@@ -1920,13 +1920,18 @@ Py_ReprLeave(PyObject *obj)
     PyObject *dict;
     PyObject *list;
     Py_ssize_t i;
+    PyObject *error_type, *error_value, *error_traceback;
+
+    PyErr_Fetch(&error_type, &error_value, &error_traceback);
 
     dict = PyThreadState_GetDict();
     if (dict == NULL)
-        return;
+        goto finally;
+
     list = PyDict_GetItemString(dict, KEY);
     if (list == NULL || !PyList_Check(list))
-        return;
+        goto finally;
+
     i = PyList_GET_SIZE(list);
     /* Count backwards because we always expect obj to be list[-1] */
     while (--i >= 0) {
@@ -1935,6 +1940,10 @@ Py_ReprLeave(PyObject *obj)
             break;
         }
     }
+
+finally:
+    /* ignore exceptions because there is no way to report them. */
+    PyErr_Restore(error_type, error_value, error_traceback);
 }
 
 /* Trashcan support. */