Support type-narrowing on non-zero length sequences

Offen
#14,244 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Anfängerfreundlichkeit
35/100
Issue-Typ
Feature
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
python
Bereich
devtools

Rechercherichtung

Reproduziere das Problem mit dem bereitgestellten lustigen Beispiel und mypy und verfolge anschließend die für die Prüfung auf eine nicht leere Liste und die Schleife verwendete Typ-Eingrenzung und Kontrollflussanalyse. Es ist keine Repository-Datei und kein Test benannt; abgeschlossen ist es, wenn mypy die abschließende Rückgabe sicher akzeptiert und die Abdeckung diese Eingrenzung verifiziert, ohne verwandte Fälle zu beeinträchtigen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

feature topic-type-narrowing

Feature

In the following example, mypy currently flags the final return statement because it thinks l could be empty, in which case the body of the for-loop would never execute, and therefore d could still be None. However, the preceding if-statement proves that the body of the for-loop will execute at least once, after which d must be int; it would be pretty cool if mypy could detect this and narrow d to int from that point forward.

def fun(d: int | None, l: list[int]) -> int:
    if len(l) == 0:
        return 0

    for x in l:
        d = (d or 0) + x

    # error: Incompatible return value type (got "Optional[int]", expected "int")
    # but actually we could safely narrow d to int
    return d
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
Ø Merge
1 T. 18 Std.
Gemergte PRs (30 T.)
54

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus python/mypy

Alle Issues in python/mypy

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

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