diff --git a/eval_type_backport/eval_type_backport.py b/eval_type_backport/eval_type_backport.py index c4b667c..8876e5b 100644 --- a/eval_type_backport/eval_type_backport.py +++ b/eval_type_backport/eval_type_backport.py @@ -131,7 +131,13 @@ def visit_BinOp(self, node) -> ast.BinOp | ast.Subscript: def visit_Subscript(self, node): value_node = self.visit(node.value) - value_val = self.eval_type(value_node) + try: + value_val = self.eval_type(value_node) + except TypeError: + # Likely typing._type_check complaining that the result isn't a type, + # e.g. that it's a plain `Literal`. + # Either way, this probably isn't one of the new generic types that needs replacing. + return self.generic_visit(node) if value_val not in new_generic_types: return self.generic_visit(node) slice_node = self.visit(node.slice) diff --git a/tests/test_eval_type_backport.py b/tests/test_eval_type_backport.py index eb02be6..8dd5bae 100644 --- a/tests/test_eval_type_backport.py +++ b/tests/test_eval_type_backport.py @@ -92,6 +92,13 @@ def test_eval_type_backport(): ] ], ) + if hasattr(t, 'Literal'): + check_eval('t.Literal[1]', t.Literal[1]) + check_eval('t.Literal[1] | t.Literal[2]', t.Union[t.Literal[1], t.Literal[2]]) + check_eval( + 't.List[t.Literal[1] | t.Literal[2]]', + t.List[t.Union[t.Literal[1], t.Literal[2]]], + ) def test_other_type_error():