Unclear error message: incompatible type "type[str]"; expected "Callable[[_T], _T]"
Offen
Dieses Issue hat noch niemand übernommen.
topic-usability
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
To Reproduce
from collections.abc import Sequence
from typing import TypeVar
_T = TypeVar("_T")
def foo(seq: Sequence[_T]) -> None:
seq = tuple(map(str, seq))
$ mypy ./mypy_bug.py
mypy_bug.py: note: In function "foo":
mypy_bug.py:7:19: error: Argument 1 to "map" has incompatible type "type[str]"; expected "Callable[[_T], _T]"
[arg-type]
seq = tuple(map(str, seq))
^~~
Found 1 error in 1 file (checked 1 source file)
Interestingly enough, this error does not fire if you assign to something other than seq:
def foo(seq: Sequence[_T]) -> None:
not_seq = tuple(map(str, seq)) # no problem, no mypy error
- Mypy version used:
mypy 1.9.0 (compiled: yes) - Mypy command-line flags: None
- Mypy configuration options from
mypy.ini(and other config files): None - Python version used:
Python 3.12.2
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, das minimale Beispiel aus mypy_bug.py mit mypy auszuführen, und vergleiche die Zuweisung zu seq mit der entsprechenden Zuweisung zu not_seq. Verfolge, wie der Type-Checker das Callable-Argument von map in diesen beiden Kontexten ableitet. Als abgeschlossen gilt die Aufgabe, wenn die inkonsistente Diagnose behoben ist und der reproduzierte Fall durch eine Regressionstestabdeckung abgesichert 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
- 42/100