From c66fc0fb53b5316dc325fde3bc738890515d38a4 Mon Sep 17 00:00:00 2001 From: Irit Katriel <1055913+iritkatriel@users.noreply.github.com> Date: Tue, 21 Dec 2021 10:12:26 +0000 Subject: bpo-46107: ExceptionGroup.subgroup()/split() should copy __note__ to the parts (GH-30159) --- Lib/test/test_exception_group.py | 4 +++- .../next/Core and Builtins/2021-12-16-23-27-05.bpo-46107.7q5an0.rst | 1 + Objects/exceptions.c | 5 +++++ 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-12-16-23-27-05.bpo-46107.7q5an0.rst diff --git a/Lib/test/test_exception_group.py b/Lib/test/test_exception_group.py index c793c45..f0ae377 100644 --- a/Lib/test/test_exception_group.py +++ b/Lib/test/test_exception_group.py @@ -495,13 +495,14 @@ class ExceptionGroupSplitTestBase(ExceptionGroupTestBase): match and e in match_leaves, rest and e in rest_leaves) - # message, cause and context equal to eg + # message, cause and context, traceback and note equal to eg for part in [match, rest, sg]: if part is not None: self.assertEqual(eg.message, part.message) self.assertIs(eg.__cause__, part.__cause__) self.assertIs(eg.__context__, part.__context__) self.assertIs(eg.__traceback__, part.__traceback__) + self.assertIs(eg.__note__, part.__note__) def tbs_for_leaf(leaf, eg): for e, tbs in leaf_generator(eg): @@ -566,6 +567,7 @@ class NestedExceptionGroupSplitTest(ExceptionGroupSplitTestBase): try: nested_group() except ExceptionGroup as e: + e.__note__ = f"the note: {id(e)}" eg = e eg_template = [ diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-12-16-23-27-05.bpo-46107.7q5an0.rst b/Misc/NEWS.d/next/Core and Builtins/2021-12-16-23-27-05.bpo-46107.7q5an0.rst new file mode 100644 index 0000000..3257805 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-12-16-23-27-05.bpo-46107.7q5an0.rst @@ -0,0 +1 @@ +Fix bug where :meth:`ExceptionGroup.split` and :meth:`ExceptionGroup.subgroup` did not copy the exception group's ``__note__`` field to the parts. diff --git a/Objects/exceptions.c b/Objects/exceptions.c index 1db49d9..d82340b 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -901,6 +901,11 @@ exceptiongroup_subset( } PyException_SetContext(eg, PyException_GetContext(orig)); PyException_SetCause(eg, PyException_GetCause(orig)); + + PyObject *note = _PyBaseExceptionObject_cast(orig)->note; + Py_XINCREF(note); + _PyBaseExceptionObject_cast(eg)->note = note; + *result = eg; return 0; error: -- cgit v0.12