Literal typeguard
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Feature
Infer str is an instance of Literal based on code path:
from typing import Literal
def f(x: Literal["a", "b"]):
...
def g(x: str):
if x == "a":
...
elif x == "b":
...
else:
raise ValueError()
f(x) # ERROR: "f" has incompatible type "str"; expected "Union[Literal['a'], Literal['b']]"
Mypy reports error for the above code, but x is actually an instance of Literal["a", "b"], because all values other than "a" or "b" raises ValueError.
Pyright, one of type checkers, can infer this code has no problem.
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 mit dem Python-Reproduzierer im Issue und vergleiche das Ergebnis von mypy mit dem beschriebenen Pyright-Verhalten. Es werden keine Quelldateien oder Tests genannt, daher gehört es zur Arbeit, die relevante Implementierung zur Typ-Eingrenzung und die bestehenden Testkonventionen zu finden. Als erledigt gilt die Aufgabe, wenn der Aufruf von f(x) nach den erschöpfenden Prüfungen akzeptiert wird, während andere Pfade weiterhin korrekt behandelt werden.
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
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100