python / python/mypy

`not isinstance(float_arg, float)` should narrow to int; `not isinstance(complex_arg, complex)` should narrow to float

Ouverte
#20,484 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

bug topic-runtime-semantics 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

The typing specs require that a float typed argument also accept int values, and that a complex type argument accept both int and complex values. That implies that, if we have a val typed complex, and isinstance(val, complex) returns false, it can still be an int or float. So,

def test(x: float):
    if not isinstance(x, float):
        reveal_type(x)  # Should reveal int

and,

def test(x: complex):
    if not isinstance(x, complex):
        reveal_type(x)  # Should reveal int | float (or possibly just float)

But they actually get treated as unreachable code and don't reveal anything.

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 les deux snippets de l’issue et inspecter les tests existants de restriction de type ou l’implémentation qui gère les vérifications isinstance. C’est terminé lorsque le premier exemple révèle int et que le second révèle int | float, ou le rétrécissement acceptable documenté, au lieu de traiter les branches comme inaccessibles.

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é
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.