MyIntEnum.ONE should be passable to functions expecting Literal[1] arguments
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Merge moyen
- 1 j 18 h
- PR mergées (30 j)
- 54
Description
Bug Report
This is related but distinct from #19576, #16327, and #17162. It's also not specific to IntEnums, but I use them in the example for clarity. StrEnums as well as enums based on (int, Enum), or (str, Enum), etc.
To Reproduce
import enum
from typing import Literal
type One = Literal[1]
type Two = Literal[2]
type Three = Literal[3]
def option(arg: One | Two | Three) -> None:
...
class MyEnum(enum.IntEnum):
ONE = 1
TWO = 2
THREE = 3
option(MyEnum.TWO) # error: Argument 1 to "option" has incompatible type "Literal[MyEnum.TWO]"; expected "Literal[1, 2, 3]" [arg-type]
Expected Behavior
No error reported.
Actual Behavior
The error in the comment in the example is a false positive. This code works fine at runtime.
Your Environment
- Mypy version used: master as of 0d791b29b7ba4e5a9b04c0b6bdba11faf4a186a2
- Python version used: 3.13
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.
Piste de recherche
Commencez par exécuter l’exemple fourni en Python 3.13 avec mypy master et suivez le traitement des arguments Literal impliquant MyEnum.TWO. La correction est complète lorsque l’exemple ne signale plus d’erreur d’argument incompatible, tout en préservant le comportement associé de enum et de Literal décrit dans l’issue.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- devtools
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 45/100