Argument "key" to "sorted" has incompatible type "Callable…"
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 believe that I've found a bug in mypy, the following MRE should as far as I can tell not result in any typing errors at all, but it reports an error (and I've found two simple workarounds for which no error is reported, strengthening my belief that this is a bug and not intended behaviour).
To Reproduce
#!/usr/bin/python3
from collections.abc import Iterable
from typing import cast
def unproblematic(iter: Iterable[int]) -> None:
print(iter)
def problematic(iter: Iterable[int | str]) -> None:
print(iter)
def key(item: int) -> int:
return -item
def main() -> None:
items: list[int] = [3, 4, 1, 2]
unproblematic(sorted(items, key=key)) # Works.
problematic(sorted(items, key=key)) # Fails mypy arg-type.
workaround = sorted(items, key=key)
problematic(workaround) # Works.
problematic(cast(Iterable[int], sorted(items, key=key))) # Works.
if __name__ == '__main__':
main()
Actual Behavior
$ mypy mre.py
mre.py:23: error: Argument "key" to "sorted" has incompatible type "Callable[[int], int]"; expected "Callable[[int | str], SupportsDunderLT[Any] | SupportsDunderGT[Any]]" [arg-type]
Your Environment
$ mypy --version
mypy 1.16.0 (compiled: yes)
$ python3 --version
Python 3.13.3
(If anyone can't trivially reproduce this, I'd be happy to provide more details about my environment.)
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 Bericht aus dem MRE in mre.py mit mypy 1.16.0 und Python 3.13.3 zu reproduzieren, und vergleiche dann den direkten Aufruf sorted(items, key=key) mit den beiden Workarounds. Als erledigt gilt die Aufgabe, wenn der direkte Aufruf das inkompatible key-Argument nicht mehr meldet und das Beispiel weiterhin korrekt typisiert ist.
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