1111 For ,
1212 Name ,
1313 Try ,
14+ List ,
1415 Uninferable ,
1516 bases ,
1617 extract_node ,
@@ -93,6 +94,7 @@ def test_star_exceptions() -> None:
9394 assert final .value .args [0 ].value == 0
9495
9596
97+
9698@pytest .mark .skipif (not PY311_PLUS , reason = "Requires Python 3.11 or higher" )
9799def test_star_exceptions_infer_name () -> None :
98100 trystar = extract_node (
@@ -108,3 +110,31 @@ def test_star_exceptions_infer_name() -> None:
108110 stmts = bases ._infer_stmts ([trystar ], context )
109111 assert list (stmts ) == [Uninferable ]
110112 assert context .lookupname == name
113+
114+
115+ @pytest .mark .skipif (not PY311_PLUS , reason = "Requires Python 3.11 or higher" )
116+ def test_star_exceptions_infer_exceptions () -> None :
117+ code = textwrap .dedent (
118+ """
119+ try:
120+ raise ExceptionGroup("group", [ValueError(654), TypeError(10)])
121+ except* ValueError as ve:
122+ print(e.exceptions)
123+ except* TypeError as te:
124+ print(e.exceptions)
125+ else:
126+ sys.exit(127)
127+ finally:
128+ sys.exit(0)"""
129+ )
130+ node = extract_node (code )
131+ assert isinstance (node , TryStar )
132+ inferred_ve = next (node .handlers [0 ].statement ().name .infer ())
133+ assert inferred_ve .name == 'ExceptionGroup'
134+ assert isinstance (inferred_ve .getattr ('exceptions' )[0 ], List )
135+ assert inferred_ve .getattr ('exceptions' )[0 ].elts [0 ].pytype () == 'builtins.ValueError'
136+
137+ inferred_te = next (node .handlers [1 ].statement ().name .infer ())
138+ assert inferred_te .name == 'ExceptionGroup'
139+ assert isinstance (inferred_te .getattr ('exceptions' )[0 ], List )
140+ assert inferred_te .getattr ('exceptions' )[0 ].elts [0 ].pytype () == 'builtins.TypeError'
0 commit comments