Wrong type hint after unpacking/swapping
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
Unpacking a tuple in the below scenario results in wrong assumed types.
To Reproduce
import typing as t
def spam(val: t.Union[t.Type, None] = None) -> None:
def eggs(type_: t.Type) -> None:
pass
reveal_type(val)
if isinstance(val, type):
reveal_type(val)
val, foo = None, val
reveal_type(val)
reveal_type(foo)
return eggs(foo)
Expected Behavior
After the line val, foo = None, val, I would expect that
valhas typeNone(ok)foohas typeType[Any]- the call to
eggs()passes
Actual Behavior
$ mypy test.py
test.py:9: note: Revealed type is 'Union[Type[Any], None]'
test.py:11: note: Revealed type is 'Type[Any]'
test.py:13: note: Revealed type is 'None'
test.py:14: note: Revealed type is 'None'
test.py:15: error: Argument 1 to "eggs" has incompatible type "None"; expected "Type[Any]"
Found 1 error in 1 file (checked 1 source file)
This does not match with my expectations 2 and 3.
Your Environment
Python 3.9
Mypy 0.790
MacOS 10.14.6
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 avec mypy l’exemple Python signalé et comparez les types révélés avant et après val, foo = None, val. Étudiez la gestion par le vérificateur de types du déballage de tuples et des variables dont le type a été affiné. Le travail est terminé lorsque foo reste Type[Any] et que l’appel à eggs(foo) passe sans erreur.
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é
- Clairement spécifiée
- Accessibilité débutants
- 35/100