Cannot infer value of constrained type parameter when calling function with union
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
I have a function that takes in either a list of X or a list of Y, and returns a list of the same X or Y that was input. When calling the function with a variable that's either list of X or a list of Y, I expect it to work the same as calling the function with either.
To Reproduce
from typing import TypeVar
StrOrInt = TypeVar("StrOrInt", str, int)
def func(vals: list[StrOrInt]) -> list[StrOrInt]:
return vals
def action(strs: list[str], ints: list[int]) -> None:
reveal_type(func(strs))
reveal_type(func(ints))
strOrInt: list[str] | list[int] = strs if strs else ints
reveal_type(func(strOrInt))
Expected Behavior
test.py:9: note: Revealed type is "builtins.list[builtins.str]"
test.py:10: note: Revealed type is "builtins.list[builtins.int]"
test.py:13: note: Revealed type is "builtins.list[builtins.str] | builtins.list[builtins.int]"
Actual Behavior
test.py:9: note: Revealed type is "builtins.list[builtins.str]"
test.py:10: note: Revealed type is "builtins.list[builtins.int]"
test.py:13: error: Cannot infer value of type parameter "StrOrInt" of "func" [misc]
test.py:13: note: Revealed type is "builtins.list[Any]"
Your Environment
- Mypy version used:
- Mypy command-line flags:
- Mypy configuration options from
mypy.ini(and other config files): - Python version used:
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 damit, den bereitgestellten Python-Reproduzierer mit mypy auszuführen, und vergleiche die drei aufgedeckten Typen mit der erwarteten Ausgabe. Untersuche die Inferenz von Typparametern für ein Argument vom Typ list[str] | list[int]; abgeschlossen ist die Aufgabe, wenn der Union-Aufruf akzeptiert wird und list[str] | list[int] ohne einen Inferenzfehler aufdeckt.
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
- Klar beschrieben
- Anfängerfreundlichkeit
- 35/100