`not isinstance(float_arg, float)` should narrow to int; `not isinstance(complex_arg, complex)` should narrow to float
Personne n'a encore pris cette issue.
- 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
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- 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