Irrefutable pattern before the last case in a match statement passes type checking but is a SyntaxError at runtime
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 35/100
Piste de recherche
Commencez par les exemples de repro.py et comparez mypy repro.py avec la compilation de Python 3.13, y compris les captures avec garde et les or-patterns imbriqués. Suivez la validation existante des or-patterns et ajoutez la vérification manquante des patterns inatteignables ; le travail est terminé lorsque mypy signale les patterns irrefutables non finaux invalides tout en acceptant les cas valides avec garde ou finaux.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Bug Report
mypy reports nothing for match statements that CPython rejects at compile time with SyntaxError: name capture 'y' makes remaining patterns unreachable. An unguarded capture or wildcard pattern in any case except the last one makes the remaining cases unreachable, so the compiler refuses the file, but mypy checks it clean. That means a file that cannot even be imported passes type checking.
The same applies to an irrefutable alternative in a non-final position of an or pattern, e.g. case _ | 1:, which CPython rejects wherever the or pattern appears, including nested inside sequence, mapping and class patterns.
To Reproduce
def f(x: int) -> str:
match x:
case y:
return "capture"
case _:
return "wildcard"
Expected Behavior
An error on case y:, matching the runtime behavior:
$ python repro.py
File "repro.py", line 3
case y:
^
SyntaxError: name capture 'y' makes remaining patterns unreachable
For reference, a case is fine if it has a guard (case y if y > 0:), and an irrefutable pattern in the last case is fine. Inside an or pattern an irrefutable alternative is only allowed in the last position, regardless of guards or which case it is in.
Actual Behavior
$ mypy repro.py
Success: no issues found in 1 source file
mypy already implements the closely related compile time check for or patterns ("Alternative patterns bind different names"), so I think this one is missing rather than intentionally skipped. I have a fix ready and will put up a PR shortly.
Your Environment
- Mypy version used: mypy 2.4.0+dev.3ad6157f9b66e71738bf39cae939aef7c3fd7ea8 (current master, also with
--native-parser) - Mypy command-line flags: none
- Mypy configuration options from
mypy.ini(and other config files): none - Python version used: 3.13.13
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Merge moyen
- 1 j 3 h
- PR mergées (30 j)
- 60
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de python/mypy
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
-
documentation
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
-
bug topic-configuration topic-error-reporting
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
-
bug topic-attrs
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
Toutes les issues de python/mypy
Issues similaires
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 75/100
-
hcocena Ouvertepolicies-accepted pre-review precheck-passed
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
Bioconductor/BiocContributions#214 · 5 commentaires ·
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 92/100
TencentCloud/Octop#1169 · 1 commentaire ·
-
[开源推荐] 在老板拷问你之前,先让 AI 灵魂拷问你 Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
521xueweihan/HelloGitHub#3778 ·
-
The version checker's trailing attribute region has no control for a less-than inside a quoted value Ouvertearea: dashboard area: tests bug perceived difficulty: 2 python
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
Nitjsefnie-Harness-Commons/daedalus#1105 · 1 commentaire ·