NoReturn return type with singledispatch causing weird errors
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
[This was originally in a comment by @Dreamsorcerer]
...
This issue has mostly talked about the redefinition error. But, we should also have singledispatch typing working. e.g. With this example:
@singledispatch
def foo(data: object) -> NoReturn:
raise ValueError(f"Unhandled type {type(data)}")
@foo.register
def _(data: str) -> str:
return data
@foo.register
def _(data: int) -> str:
return str(data)
a = foo(7)
reveal_type(a)
You also get errors due to not recognising the overloads:
src/service/transaction_status_service.py:72: error: Need type annotation for "a" [var-annotated]
src/service/transaction_status_service.py:73: note: Revealed type is "<nothing>"
It would be good for mypy to treat the @foo.register like an @overload.
I was also getting unreachable code errors after every call to the defined function. However, I was unable to reproduce it with a minimal example, so not sure exactly what is causing that.
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 singledispatch-Beispiel im Issue und prüfe den verlinkten ursprünglichen Kommentar und die Diskussion zum bestehenden Verhalten bei Neudefinitionen. Reproduziere die gemeldeten Fehler und verifiziere anschließend, dass registrierte Implementierungen wie Overloads behandelt werden, wobei das Ergebnis des Aufrufs als str inferiert wird und die fälschlich gemeldeten Fehler zu unerreichbarem Code und Variablenannotationen behoben werden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Feature
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100