python / python/mypy

False positive (and puzzling message) with union types and callables

Offen
#13,720 0 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

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

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Ö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

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.