Skip to content

Commit f4043ab

Browse files
authored
gh-160659: Add tests for except* handlers that raise a BaseException (#160660)
1 parent 210e7ab commit f4043ab

1 file changed

Lines changed: 82 additions & 0 deletions

File tree

‎Lib/test/test_except_star.py‎

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -705,6 +705,88 @@ def test_raise_handle_all_raise_two_unnamed(self):
705705
self.assertMetadataEqual(orig, exc.exceptions[0].__context__)
706706
self.assertMetadataEqual(orig, exc.exceptions[1].__context__)
707707

708+
def test_raise_base_exception(self):
709+
class MyBaseException(BaseException):
710+
pass
711+
712+
orig = ExceptionGroup("eg", [ValueError(1), OSError(2)])
713+
try:
714+
try:
715+
raise orig
716+
except* OSError:
717+
raise MyBaseException(3)
718+
except BaseException as e:
719+
exc = e
720+
721+
self.assertIs(type(exc), BaseExceptionGroup)
722+
self.assertEqual(exc.message, "")
723+
self.assertEqual(len(exc.exceptions), 2)
724+
self.assertExceptionIsLike(exc.exceptions[0], MyBaseException(3))
725+
self.assertExceptionIsLike(
726+
exc.exceptions[1], ExceptionGroup("eg", [ValueError(1)]))
727+
728+
self.assertExceptionIsLike(
729+
exc.exceptions[0].__context__,
730+
ExceptionGroup("eg", [OSError(2)]))
731+
732+
self.assertMetadataNotEqual(orig, exc)
733+
self.assertMetadataEqual(orig, exc.exceptions[0].__context__)
734+
735+
def test_raise_handle_all_raise_one_base_exception(self):
736+
class MyBaseException(BaseException):
737+
pass
738+
739+
orig = ExceptionGroup("eg", [TypeError(1), ValueError(2)])
740+
try:
741+
try:
742+
raise orig
743+
except* (TypeError, ValueError):
744+
raise MyBaseException(3)
745+
except BaseException as e:
746+
exc = e
747+
748+
self.assertExceptionIsLike(exc, MyBaseException(3))
749+
750+
self.assertExceptionIsLike(
751+
exc.__context__,
752+
ExceptionGroup("eg", [TypeError(1), ValueError(2)]))
753+
754+
self.assertMetadataNotEqual(orig, exc)
755+
self.assertMetadataEqual(orig, exc.__context__)
756+
757+
def test_raise_handle_all_raise_base_exception_and_exception(self):
758+
class MyBaseException(BaseException):
759+
pass
760+
761+
orig = ExceptionGroup("eg", [TypeError(1), ValueError(2)])
762+
try:
763+
try:
764+
raise orig
765+
except* TypeError:
766+
raise MyBaseException(3)
767+
except* ValueError:
768+
raise SyntaxError(4)
769+
except BaseException as e:
770+
exc = e
771+
772+
self.assertIs(type(exc), BaseExceptionGroup)
773+
self.assertEqual(exc.message, "")
774+
self.assertEqual(len(exc.exceptions), 2)
775+
self.assertExceptionIsLike(exc.exceptions[0], MyBaseException(3))
776+
self.assertExceptionIsLike(exc.exceptions[1], SyntaxError(4))
777+
778+
self.assertExceptionIsLike(
779+
exc.exceptions[0].__context__,
780+
ExceptionGroup("eg", [TypeError(1)]))
781+
782+
self.assertExceptionIsLike(
783+
exc.exceptions[1].__context__,
784+
ExceptionGroup("eg", [ValueError(2)]))
785+
786+
self.assertMetadataNotEqual(orig, exc)
787+
self.assertMetadataEqual(orig, exc.exceptions[0].__context__)
788+
self.assertMetadataEqual(orig, exc.exceptions[1].__context__)
789+
708790

709791
class TestExceptStarRaiseFrom(ExceptStarTest):
710792
def test_raise_named(self):

0 commit comments

Comments
 (0)