`possibly-undefined` false positive with `global` statement inside `if`
Dieses Issue hat noch niemand übernommen.
- 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]
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
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Ö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