Inconsistent feeling handling of Any in binder
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
from typing import Any, Final
CONSTANT: Final = 2015
def good(result: dict[str, Any]) -> None:
code = 'asdf'
if isinstance(result, dict):
code = result.get('code', code)
reveal_type(code) # N: Revealed type is "Any"
if code == CONSTANT:
reveal_type(code) # N: Revealed type is "Any"
def bad(result: Any) -> None:
code = 'asdf'
if isinstance(result, dict):
code = result.get('code', code)
reveal_type(code) # N: Revealed type is "builtins.str"
if code == CONSTANT:
reveal_type(code) # N: Revealed type is "builtins.str"
Based on real world code for rotki
This feels a little inconsistent / violating of gradual typing
Not exactly sure what if anything we should do, though
Found this via https://github.com/python/mypy/pull/20660 which makes --warn-unreachable flag raise a diagnostic on the second comparison
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 die beiden Beispiele und untersuche den Binder- oder Type-Narrowing-Pfad, den sie auslösen; das Issue nennt weder eine Quelldatei noch einen Test. Kläre mit den Maintainer:innen die beabsichtigte Semantik des Gradual Typing, bevor du das Verhalten änderst, und füge anschließend einen Regressionstest für das vereinbarte Ergebnis hinzu.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Muss geklärt werden
- Anfängerfreundlichkeit
- 35/100