python / python/mypy

False positive: Callable arg types more strict than required

Ouverte
#15,328 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

Struggled to name this properly but here's a repro:

import typing

# Want to accept any callable with a string arg
CallableT = typing.Callable[[str], None]

def func(callable_m: dict[str, CallableT]) -> None:
    callable_m['first']("a")
    
    
def first(a: str) -> None:
    return None
    
def second(a: str) -> None:
    return None

def third(b: str) -> None:
    return None   

# This mapping will fail because the callables will have type:
# Callable[[Arg(str, 'a')], None]    
failed_mapping = {
    'first': first,
    'second': second
}
func(failed_mapping)

# By renaming the arg in `third` from `a` to `b` everything is groovy
passing_mapping = {
    'first': first,
    'third': third
}
func(passing_mapping)

https://mypy-play.net/?mypy=latest&python=3.11&gist=ff039c923e370f79a680c463ef627810

Easy workaround with renaming the arg but is a bit of a pain

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 la reproduction Python fournie et le lien mypy-play, puis suivez la vérification de compatibilité des callables qui compare les noms des paramètres. Confirmez le comportement avec un test de régression ciblé ; c’est terminé lorsque des callables compatibles tels que first et second sont acceptés sans renommer leurs paramètres.

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

Évaluation

Stack technique
python
Domaine
tooling
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

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