diff --git a/mypy/checkpattern.py b/mypy/checkpattern.py index 9c6e67db03e1..a20dfb714025 100644 --- a/mypy/checkpattern.py +++ b/mypy/checkpattern.py @@ -463,7 +463,8 @@ def visit_class_pattern(self, o: ClassPattern) -> PatternType: # Check class type # type_info = o.class_ref.node - assert type_info is not None + if type_info is None: + return PatternType(AnyType(TypeOfAny.from_error), AnyType(TypeOfAny.from_error), {}) if isinstance(type_info, TypeAlias) and not type_info.no_args: self.msg.fail(message_registry.CLASS_PATTERN_GENERIC_TYPE_ALIAS, o) return self.early_non_match() diff --git a/test-data/unit/check-python310.test b/test-data/unit/check-python310.test index 9d56aeb468f7..7c2bb1068e47 100644 --- a/test-data/unit/check-python310.test +++ b/test-data/unit/check-python310.test @@ -567,6 +567,20 @@ match m: reveal_type(m) # N: Revealed type is "builtins.tuple[Any, ...]" [builtins fixtures/primitives.pyi] +[case testMatchInvalidClassPattern] +m: object + +match m: + case xyz(y): # E: Name "xyz" is not defined + reveal_type(m) # N: Revealed type is "Any" + reveal_type(y) # E: Cannot determine type of "y" \ + # N: Revealed type is "Any" + +match m: + case xyz(z=x): # E: Name "xyz" is not defined + reveal_type(x) # E: Cannot determine type of "x" \ + # N: Revealed type is "Any" + [case testMatchClassPatternCaptureDataclass] from dataclasses import dataclass