Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exhaustive checks with assert_never when using match on a 2-tuple fails #16650

Open
MaxG87 opened this issue Dec 12, 2023 · 2 comments
Open

Exhaustive checks with assert_never when using match on a 2-tuple fails #16650

MaxG87 opened this issue Dec 12, 2023 · 2 comments
Labels
bug mypy got something wrong topic-match-statement Python 3.10's match statement

Comments

@MaxG87
Copy link

MaxG87 commented Dec 12, 2023

Bug Report

I learned about assert_never, with which checks for exhaustiveness can be performed. I wanted to use it in a match statement where I want to cover all 4 possible scenarios of a tuple[int|None, int|None]. Unfortunately, when adding the catch-all case arm that contains typing.assert_never, I get a typing error indicating a non-exhaustive check above.

The error persists in a couple of variations. In particular, it persists when using 1-tuple. However, when matching on one value directly, using assert_never works as intended.

To Reproduce

https://gist.github.com/mypy-play/1df3d1b4c9e82226df17094a9f9c6af5
https://mypy-play.net/?mypy=latest&python=3.12&gist=1df3d1b4c9e82226df17094a9f9c6af5

Expected Behavior

All examples in the provided Gist should pass the type checks.

Actual Behavior

Mypy rejects the first three functions of the Gist. In particular, it's output reads:

Failed (exit code: 1) (2476 ms)

main.py:22: error: Argument 1 to "assert_never" has incompatible type "int | None"; expected "NoReturn" [arg-type]
main.py:43: error: Argument 1 to "assert_never" has incompatible type "int | None"; expected "NoReturn" [arg-type]
main.py:58: error: Argument 1 to "assert_never" has incompatible type "int | None"; expected "NoReturn" [arg-type]
Found 3 errors in 1 file (checked 1 source file)

Your Environment

Since I am using the Gist, I hope my particular environment doesn't matter much.

@MaxG87 MaxG87 added the bug mypy got something wrong label Dec 12, 2023
@tmke8
Copy link
Contributor

tmke8 commented Dec 12, 2023

This is probably the same problem as in #15426 – mypy doesn't narrow tuples in the match statement.

EDIT: actually, #12364 is the better central issue

@MaxG87
Copy link
Author

MaxG87 commented Dec 12, 2023

Yes, it looks related. My issue just adds another nuance.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug mypy got something wrong topic-match-statement Python 3.10's match statement
Projects
None yet
Development

No branches or pull requests

3 participants