aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Python/ceval.c
diff options
context:
space:
mode:
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>2025-01-25 13:00:23 +0000
committerGitHub <noreply@github.com>2025-01-25 13:00:23 +0000
commitc39ae8922bad3e5ceeafa05891536c1584b6f3db (patch)
tree04eb746a11e49b7e2da5fc9992bffc0b0e39cbfb /Python/ceval.c
parent9e52e553f4a906c120f807e940891f7325011b67 (diff)
downloadcpython-c39ae8922bad3e5ceeafa05891536c1584b6f3db.tar.gz
cpython-c39ae8922bad3e5ceeafa05891536c1584b6f3db.zip
gh-128799: Add frame of except* to traceback when wrapping a naked exception (#128971)
Diffstat (limited to 'Python/ceval.c')
-rw-r--r--Python/ceval.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index 5469874e978..100f99ea8e3 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -27,6 +27,7 @@
#include "pycore_range.h" // _PyRangeIterObject
#include "pycore_setobject.h" // _PySet_Update()
#include "pycore_sliceobject.h" // _PyBuildSlice_ConsumeRefs
+#include "pycore_traceback.h" // _PyTraceBack_FromFrame
#include "pycore_tuple.h" // _PyTuple_ITEMS()
#include "pycore_uop_ids.h" // Uops
#include "pycore_pyerrors.h"
@@ -2074,8 +2075,8 @@ raise_error:
*/
int
-_PyEval_ExceptionGroupMatch(PyObject* exc_value, PyObject *match_type,
- PyObject **match, PyObject **rest)
+_PyEval_ExceptionGroupMatch(_PyInterpreterFrame *frame, PyObject* exc_value,
+ PyObject *match_type, PyObject **match, PyObject **rest)
{
if (Py_IsNone(exc_value)) {
*match = Py_NewRef(Py_None);
@@ -2101,6 +2102,15 @@ _PyEval_ExceptionGroupMatch(PyObject* exc_value, PyObject *match_type,
if (wrapped == NULL) {
return -1;
}
+ PyFrameObject *f = _PyFrame_GetFrameObject(frame);
+ if (f != NULL) {
+ PyObject *tb = _PyTraceBack_FromFrame(NULL, f);
+ if (tb == NULL) {
+ return -1;
+ }
+ PyException_SetTraceback(wrapped, tb);
+ Py_DECREF(tb);
+ }
*match = wrapped;
}
*rest = Py_NewRef(Py_None);