-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Closed
Labels
bugmypy got something wrongmypy got something wrongtopic-enumtopic-match-statementPython 3.10's match statementPython 3.10's match statementtopic-reachabilityDetecting unreachable codeDetecting unreachable code
Description
When an enum only has one value, exhaustiveness checks don't work properly. The reason I want to do this is I am adding a new enum that will grow over time, and want to make sure that when new values are added to the enum, they get handled by downstream code.
To Reproduce
import enum
from typing_extensions import assert_never
class MyEnum(enum.Enum):
foo = "foo"
def foo(x: MyEnum) -> int:
match x:
case MyEnum.foo:
return 1
assert_never(x)
Expected Behavior
I expect this to typecheck with no errors
Actual Behavior
mypy test.py
test.py:14: error: Argument 1 to "assert_never" has incompatible type "MyEnum"; expected "NoReturn" [arg-type]
Found 1 error in 1 file (checked 1 source file)
Note that changing the original to the following results in a clean run, so the issue here seems to be that the enum only has one member.
import enum
from typing_extensions import assert_never
class MyEnum(enum.Enum):
foo = "foo"
bar = "bar"
def foo(x: MyEnum) -> int:
match x:
case MyEnum.foo:
return 1
case MyEnum.bar:
return 2
assert_never(x)
Your Environment
- Mypy version used: mypy 0.991 (compiled: yes)
- Mypy command-line flags: N/A
- Mypy configuration options from
mypy.ini
(and other config files): N/A - Python version used: 3.10.4
johnthagen, ods and superosku
Metadata
Metadata
Assignees
Labels
bugmypy got something wrongmypy got something wrongtopic-enumtopic-match-statementPython 3.10's match statementPython 3.10's match statementtopic-reachabilityDetecting unreachable codeDetecting unreachable code