11
11
For ,
12
12
Name ,
13
13
Try ,
14
+ List ,
14
15
Uninferable ,
15
16
bases ,
16
17
extract_node ,
@@ -93,6 +94,7 @@ def test_star_exceptions() -> None:
93
94
assert final .value .args [0 ].value == 0
94
95
95
96
97
+
96
98
@pytest .mark .skipif (not PY311_PLUS , reason = "Requires Python 3.11 or higher" )
97
99
def test_star_exceptions_infer_name () -> None :
98
100
trystar = extract_node (
@@ -108,3 +110,31 @@ def test_star_exceptions_infer_name() -> None:
108
110
stmts = bases ._infer_stmts ([trystar ], context )
109
111
assert list (stmts ) == [Uninferable ]
110
112
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