python / python/mypy

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

Offen
#20,484 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug topic-runtime-semantics topic-type-narrowing
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

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.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, die beiden Snippets aus dem Issue zu reproduzieren und die vorhandenen Tests oder die Implementierung zur Typverengung zu untersuchen, die isinstance-Prüfungen verarbeitet. Fertig ist es, wenn das erste Beispiel int und das zweite int | float oder die dokumentierte akzeptable Typverengung erkennt, statt die Zweige als unerreichbar zu behandeln.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
devtools
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.