diff --git a/stdlib/@tests/test_cases/builtins/check_exception_group-py311.py b/stdlib/@tests/test_cases/builtins/check_exception_group-py311.py index e53cd1228..b1bf701c4 100644 --- a/stdlib/@tests/test_cases/builtins/check_exception_group-py311.py +++ b/stdlib/@tests/test_cases/builtins/check_exception_group-py311.py @@ -321,3 +321,34 @@ if sys.version_info >= (3, 11): # Note, that `Self` type is not preserved in runtime. assert_type(cg1.derive([ValueError()]), ExceptionGroup[ValueError]) assert_type(cg1.derive([KeyboardInterrupt()]), BaseExceptionGroup[KeyboardInterrupt]) + + # Additional tests + # ============================== + + def test_exception_group_default_type() -> None: + try: + ex: ExceptionGroup = ExceptionGroup("", [ValueError("a"), ValueError("b")]) + raise ex + except ExceptionGroup as e: + assert all(isinstance(exc, ValueError) for exc in e.exceptions) + + def test_exception_group_with_specific_type() -> None: + try: + ex: ExceptionGroup[ValueError] = ExceptionGroup("", [ValueError("a"), ValueError("b")]) + raise ex + except ExceptionGroup as e: + assert all(isinstance(exc, ValueError) for exc in e.exceptions) + + def test_base_exception_group_default_type() -> None: + try: + ex: BaseExceptionGroup = BaseExceptionGroup("", [SystemExit("a"), SystemExit("b")]) + raise ex + except BaseExceptionGroup as e: + assert all(isinstance(exc, SystemExit) for exc in e.exceptions) + + def test_base_exception_group_with_specific_type() -> None: + try: + ex: BaseExceptionGroup[SystemExit] = BaseExceptionGroup("", [SystemExit("a"), SystemExit("b")]) + raise ex + except BaseExceptionGroup as e: + assert all(isinstance(exc, SystemExit) for exc in e.exceptions) diff --git a/stdlib/builtins.pyi b/stdlib/builtins.pyi index 13a0e4f70..2299e6ccb 100644 --- a/stdlib/builtins.pyi +++ b/stdlib/builtins.pyi @@ -2006,9 +2006,9 @@ if sys.version_info >= (3, 10): class EncodingWarning(Warning): ... if sys.version_info >= (3, 11): - _BaseExceptionT_co = TypeVar("_BaseExceptionT_co", bound=BaseException, covariant=True) + _BaseExceptionT_co = TypeVar("_BaseExceptionT_co", bound=BaseException, covariant=True, default=BaseException) _BaseExceptionT = TypeVar("_BaseExceptionT", bound=BaseException) - _ExceptionT_co = TypeVar("_ExceptionT_co", bound=Exception, covariant=True) + _ExceptionT_co = TypeVar("_ExceptionT_co", bound=Exception, covariant=True, default=Exception) _ExceptionT = TypeVar("_ExceptionT", bound=Exception) # See `check_exception_group.py` for use-cases and comments.