Skip to content

Commit 837543e

Browse files
committed
Fix crash in match statement if class name is undefined (#12417)
Fixes #12416.
1 parent 6606dbe commit 837543e

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

mypy/checkpattern.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,8 @@ def visit_class_pattern(self, o: ClassPattern) -> PatternType:
463463
# Check class type
464464
#
465465
type_info = o.class_ref.node
466-
assert type_info is not None
466+
if type_info is None:
467+
return PatternType(AnyType(TypeOfAny.from_error), AnyType(TypeOfAny.from_error), {})
467468
if isinstance(type_info, TypeAlias) and not type_info.no_args:
468469
self.msg.fail(message_registry.CLASS_PATTERN_GENERIC_TYPE_ALIAS, o)
469470
return self.early_non_match()

test-data/unit/check-python310.test

+14
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,20 @@ match m:
567567
reveal_type(m) # N: Revealed type is "builtins.tuple[Any, ...]"
568568
[builtins fixtures/primitives.pyi]
569569

570+
[case testMatchInvalidClassPattern]
571+
m: object
572+
573+
match m:
574+
case xyz(y): # E: Name "xyz" is not defined
575+
reveal_type(m) # N: Revealed type is "Any"
576+
reveal_type(y) # E: Cannot determine type of "y" \
577+
# N: Revealed type is "Any"
578+
579+
match m:
580+
case xyz(z=x): # E: Name "xyz" is not defined
581+
reveal_type(x) # E: Cannot determine type of "x" \
582+
# N: Revealed type is "Any"
583+
570584
[case testMatchClassPatternCaptureDataclass]
571585
from dataclasses import dataclass
572586

0 commit comments

Comments
 (0)