]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-46107: ExceptionGroup.subgroup()/split() should copy __note__ to the parts (GH...
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>
Tue, 21 Dec 2021 10:12:26 +0000 (10:12 +0000)
committerGitHub <noreply@github.com>
Tue, 21 Dec 2021 10:12:26 +0000 (10:12 +0000)
Lib/test/test_exception_group.py
Misc/NEWS.d/next/Core and Builtins/2021-12-16-23-27-05.bpo-46107.7q5an0.rst [new file with mode: 0644]
Objects/exceptions.c

index c793c45e7241a45080e56e918b33c490249fd775..f0ae37741ab60c48b03029887fb05ae41613ba84 100644 (file)
@@ -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 (file)
index 0000000..3257805
--- /dev/null
@@ -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.
index 1db49d949b5c010752451ec85f5636a625d15b33..d82340b8e78abd4fe1f1f967d31e733819414e3b 100644 (file)
@@ -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: