python / python/mypy

`possibly-undefined` false positive with `global` statement inside `if`

Offen
#15,838 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug topic-possibly-undefined
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
Ø Merge
1 T. 18 Std.
Gemergte PRs (30 T.)
54

Beschreibung

Bug Report

The optional possibly-undefined error gives a false positive on this code with a global statement inside an if branch. At runtime, Python treats global as applying unconditionally for the entire function scope, but mypy seems to think it only applies to the branch.

To Reproduce

# mypy: enable-error-code="possibly-undefined"

g = 1

def f(b: bool) -> None:
    if b:
        global g
        g = 2

    print(g)  # error: Name "g" may be undefined  [possibly-undefined]

Playground

Expected Behavior

No error.

Actual Behavior

main.py:10: error: Name "g" may be undefined  [possibly-undefined]
Found 1 error in 1 file (checked 1 source file)

Your Environment

  • Mypy version used: 1.4.1
  • Mypy command-line flags: --enable-error-code=possibly-undefined
  • Mypy configuration options from mypy.ini (and other config files): none
  • Python version used: 3.10.12

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

Reproduziere den Bericht mit dem bereitgestellten Python-Snippet und dem möglicherweise nicht definierten Fehlercode und verfolge anschließend, wie mypy die globale Anweisung innerhalb des if-Zweigs behandelt. Erledigt bedeutet, dass das Beispiel nach dem Zweig keinen falsch-positiven Fehler für g erzeugt, während echte Fälle von möglicherweise nicht definierten Variablen weiterhin diagnostiziert werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
compilers
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.