python / python/mypy

[bug] Assigning a builtin to a Callable changes its type to '<nothing>'

Ouverte
#7,522 3 commentaires 2 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

bug false-positive priority-1-normal topic-type-narrowing
Langage dominant
Python
Étoiles
20.6k
Forks
3.3k
Métriques de merge des PR
Métriques de PR en attente

Description

$ python --version                                                                                                                                 
Python 3.7.2

$ mypy --version
mypy 0.730+dev.8782ae7f789ad5b8cab97d3c8419f9f98b6eb285

Assigning a builtin to a Callable on the same line as the type declaration works, but doing so on separate lines does not:

$ mypy --strict -c "from typing import Callable, Any; cast: Callable[[Any], Any] = str; cast(5)"
Success: no issues found in 1 source file
$ mypy --strict -c "from typing import Callable, Any; cast: Callable[[Any], Any]; cast = str; cast(5)"
<string>:1: error: <nothing> not callable
Found 1 error in 1 file (checked 1 source file)

This becomes a problem when trying to assign builtins conditionally. Assigning lambda x: str(x) is a workaround, but is rather a hack.

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 les deux reproductions minimales de mypy --strict -c dans l’issue et comparez la manière dont l’inférence de types des callable traite les affectations sur la même ligne par rapport aux affectations séparées. Suivez la gestion des affectations et des builtins dans mypy, puis vérifiez que les deux exemples, y compris l’affectation conditionnelle d’un builtin, passent la vérification de types sans signaler <nothing> not callable.

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é
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

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