python / python/mypy

Unpacking unions of tuples skips type checking

Ouverte
#15,969 1 commentaire 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 applies type checks when passing an unpacked tuple to a function, but it seems to skip the checks when passing a variable that is a union of tuple types.

To Reproduce

def inner(_name: str, _num: int) -> None:
    ...

# mypy passes as expected
def fun1(name_and_num: tuple[str, int]) -> None:
    inner(*name_and_num)

# mypy errors as expected
def fun2(name_and_num: tuple[str, float]) -> None:
    inner(*name_and_num)

# mypy passes *but should error*
def fun3(name_and_num: tuple[str, int] | tuple[str, float]) -> None:
    inner(*name_and_num)

https://gist.github.com/mypy-play/257f0a56dd44b405b2853e2854333cc2

Expected Behavior

arg-type error on line 14

Actual Behavior

No error on line 14

Your Environment

  • Mypy version used: 1.5.1
  • Python version used: 3.11.5

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 reproduire le comportement avec l’exemple fourni utilisant fun1, fun2 et fun3 sur Python 3.11.5 avec mypy 1.5.1. Suivez le chemin de vérification de types de l’union de tuples décompressée et vérifiez que l’appel dans fun3 signale l’erreur arg-type attendue à la ligne 14.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
compilers
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
45/100

Recevez les nouvelles issues par e-mail

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