NamedTuple with dependent default values causes unexpected 'Name is not defined' errors
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Hi there,
When there is a NamedTuple with a default value that depends on one or more other default values, followed by a default value that should resolve into a NameError, all preceding default values get the Name <variable> is not defined error as well.
E.g.
from typing import NamedTuple
class Example(NamedTuple):
a: int = 1
b: int = 2
c: int = a*b
d: int = does_not_exist*5
Causes:
scratch.py:6: error: Name 'a' is not defined
scratch.py:6: error: Name 'b' is not defined
scratch.py:7: error: Name 'does_not_exist' is not defined
If I comment out line 6, I do, however, get the expected result.
from typing import NamedTuple
class Example(NamedTuple):
a: int = 1
b: int = 2
# c: int = a*b
d: int = does_not_exist*5
scratch.py:7: error: Name 'does_not_exist' is not defined
This was tried on version 0.760.
$ mypy --version
mypy 0.760
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
Beginne damit, das Problem aus dem NamedTuple-Beispiel in scratch.py mit mypy 0.760 zu reproduzieren, und untersuche dann den für Standardwerte verantwortlichen NamedTuple-Typprüfpfad. Vergleiche den Fall mit abhängigem Standardwert mit der Version, in der c auskommentiert ist. Als erledigt gilt die Aufgabe, wenn der undefinierte Name in d ohne überflüssige Fehler für a, b oder c gemeldet wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- tooling
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 35/100