python / python/mypy

Erroneous arg-type error with Mapping and reversed Mapping

Offen
#18,436 1 Kommentar 0 Reaktionen 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

I get an arg-type error in MyPy 1.14.1 on the following code using a Union of inverted collections.abc.Mapping:

from collections.abc import Mapping


def fun(x: Mapping[str, int | None] | Mapping[int | None, str]):
    pass


fun({"a": 1, "b": 2})

fun({"a": 1, "b": 2, "c": None})

fun({1: "a", 2: "b"})

fun({1: "a", 2: "b", None: "c"})

The error is:

mypy_type_error.py:12: error: Argument 1 to "fun" has incompatible type "dict[int, str]"; expected "Mapping[str, int | None] | Mapping[int | None, str]" [arg-type]

That is, MyPy takes issue with the parameters in the third function call. The last call including the None key does not produce an error, though. I'd expect the third call to not show an error, either.

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 gemeldete Snippet mit MyPy 1.14.1 auszuführen und die vier Aufrufe zu vergleichen. Verfolge dann die Prüfung der Argumenttypen und die Behandlung von union-of-Mapping, um den relevanten Bereich für Regressionstests zu finden; erledigt ist es, wenn der dritte Aufruf konsistent mit dem vierten akzeptiert wird, ohne dass die anderen Beispiele Regressionen zeigen.

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
Größtenteils klar
Anfängerfreundlichkeit
42/100

Neue Issues direkt in Ihr Postfach

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