python / python/mypy

Unclear error message: incompatible type "type[str]"; expected "Callable[[_T], _T]"

Offen
#17,026 5 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

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

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

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

Neue Issues direkt in Ihr Postfach

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