Incompatible singledispatch signature not detected
Offen
Dieses Issue hat noch niemand übernommen.
bug
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
This generates no error from mypy but fails at runtime:
from functools import singledispatch
@singledispatch
def f(x: object) -> int:
return 1
@f.register
def _(x: int, y: str) -> int:
return 2
print(f(1)) # No error reported, but fails at runtime
Another example:
from functools import singledispatch
@singledispatch
def f(x: object, y: str) -> None:
y + ''
@f.register
def _(x: int, y: int) -> None:
y + 1
print(f(1, 'x')) # No error reported, but fails at runtime
Third example:
from functools import singledispatch
@singledispatch
def f(x: object, y: str) -> None:
pass
@f.register
def _(x: int, yy: str) -> None:
pass
print(f(1, y='x')) # No error reported, but fails at runtime
We should check that the signatures of registered items are compatible with the generic one, except for the first argument.
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 den drei singledispatch-Beispielen und verfolge mypys Behandlung registrierter Funktionen und der Signaturkompatibilität. Füge Regressionstests für Aufrufe mit Positions- und Schlüsselwortargumenten hinzu und überprüfe anschließend, dass inkompatible registrierte Signaturen Fehler erzeugen, während kompatible weiterhin akzeptiert werden.
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
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100