Poor inference of dict literal when dict type is unioned with certain types
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Bug Report
To Reproduce
https://mypy-play.net/?mypy=master&python=3.11&gist=5cf1ab002a6dc63c5013fa0f6a00ba4d
Expected Behavior
I expect the dict literal to be inferred as dict[str, str |int] when passed to both foo and bar
Actual Behavior
It's inferred as dict[str, object] when passed to foo, which causes a false positive.
Note that the inference depends on the type you union the dict with. E.g. if you replace Iterable[tuple[str] with list[tuple[str]] you get the expected inference.
Your Environment
- Mypy version used: Tried 1.0.0, 1.0.1, 1.1.1, 1.2.0 and master in the playground, all have the same behavior
- Mypy command-line flags: See playground
- Mypy configuration options from
mypy.ini(and other config files): See playground - Python version used: 3.11
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 l’exemple mypy playground lié, avec Python 3.11 et les versions indiquées, afin de reproduire l’inférence différente pour foo et bar. Suivez le comportement de l’inférence des littéraux de dict pour les unions impliquant Iterable[tuple[str]] et list[tuple[str]]. Le travail est terminé lorsque le dict est inféré comme dict[str, str | int] dans les deux appels et qu’un test de régression couvre ce cas.
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é
- À clarifier
- Accessibilité débutants
- 38/100