False positive (and puzzling message) with union types and callables
Offen
Dieses Issue hat noch niemand übernommen.
bug
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
To Reproduce
This works (no complains from mypy):
from typing import TypeVar, Callable
_T = TypeVar("_T")
class Param:
def __init__(self, initialize: Callable[[], _T]) -> None:
...
Param(lambda: 1)
as well as:
from typing import TypeVar, Callable
_T = TypeVar("_T")
class Param:
def __init__(self, initialize: _T | Callable[[], _T]) -> None:
...
Param(1)
but for this:
from typing import TypeVar, Callable
_T = TypeVar("_T")
class Param:
def __init__(self, initialize: _T | Callable[[], _T]) -> None:
...
Param(lambda: 1)
mypy issues two weird messages:
src\playground.py:9: error: Argument 1 to "Param" has incompatible type "Callable[[], int]"; expected "Callable[[], <nothing>]"
src\playground.py:9: error: Return statement in function which does not return
Found 2 errors in 1 file (checked 1 source file)
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 drei Beispiele in src/playground.py und vergleiche die Diagnosen für die Union, die Callable beinhaltet. Beginne damit, mypy's Behandlung der Callable- und Union-Typinferenz nachzuverfolgen, und füge anschließend einen Regressionstest hinzu, der das fehlschlagende Beispiel abdeckt; abgeschlossen ist die Aufgabe, wenn der gültige Aufruf keine Fehler erzeugt und die irreführende Rückgabe-Diagnose verschwunden ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100