python / python/mypy

False-positive with multiple *args splats in a function call

Ouverte
#10,481 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

bug
Langage dominant
Python
Étoiles
20.6k
Forks
3.3k
Métriques de merge des PR
Métriques de PR en attente

Description

Bug Report

mypy falsely(?) reports a type error when the *args syntax is used more than once in a function call.

To Reproduce

mypy --no-incremental --config /dev/null -c '
def foobar(a: int, b: str, c: int) -> None:
    ...


foo = (1,)
bar = ("b", 3)

foobar(*foo, *bar)
'

Expected Behavior

Success: no issues found in 1 source file

Actual Behavior

<string>:9: error: Argument 2 to "foobar" has incompatible type "*Tuple[str, int]"; expected "str"
<string>:9: error: Argument 2 to "foobar" has incompatible type "*Tuple[str, int]"; expected "int"

This error goes away if I:

  • make foo an int instead of Tuple[int], and remove the splat when foobar() is called.
  • make bar two ints and make foobar() take three int arguments.
  • make foo a Tuple[str, int] and make foobar() take str, int, str, int arguments.
  • make bar just a Tuple[str] and make foobar() take int, str arguments.

Your Environment

This occurs with the standard version of mypy in Debian Testing:

$ /usr/bin/mypy --version
mypy 0.812

...as well as with the latest git revision:

$ ~/.local/pipx/venvs/mypy/bin/mypy --version
mypy 0.820+dev.8642b351cff94c471333256f9cd6867807384f01

In both cases, I'm using the Debian-provided Python 3.9.2,
on up-to-date Debian Testing.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par exécuter la commande mypy fournie et confirmer les deux diagnostics pour l’appel comportant plusieurs tuple splats. Suivez la vérification des arguments de l’appel et la gestion des tuple splats, puis ajoutez une couverture pour ce reproducer ; le travail est terminé lorsque la commande ne signale aucun problème sans provoquer de régression dans les variantes indiquées.

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

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.