python / python/mypy

Please just change something. Weird combination of dead code and inferred None

Offen
#10,634 7 Kommentare 3 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

feature topic-configuration topic-reachability
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
Ø Merge
1 T. 18 Std.
Gemergte PRs (30 T.)
54

Beschreibung

Feature

foo = None

def bar() -> str:
    global foo
    if foo is not None:
        print("Hello")
    else:
        foo = "bar"
        return "lol"

This program type-checks, even though it's obviously wrong. It's not a bug, it's a feature:

  • Inferred type of foo is None, even though Optional[str] was intended.
  • Because foo has type None, the if foo is not None: part is eliminated as dead code, and therefore the missing return isn't detected.
  • After setting foo = "bar", reveal_type(foo) shows str. Perhaps the assignment should be an error?

Pitch

A friend submitted a PR like this and thought it was fine.

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

Die Payload nennt keine Dateien, Tests oder Einstiegspunkte. Führe zunächst das bereitgestellte Snippet mit mypy aus und prüfe, wie der Umgang mit inferiertem None, globaler Neuzuweisung, unerreichbaren Zweigen und fehlenden Rückgabewerten erfolgt. Bevor der Umfang der Implementierung festgelegt werden kann, ist eine Entscheidung der Maintainer zur beabsichtigten Semantik und zur Regressionstestabdeckung erforderlich.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
devtools
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

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