python / python/mypy

False positive error on `**kwargs` with `Mapping[Literal, Any]` type

Offen
#20,424 0 Kommentare 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

https://mypy-play.net/?mypy=master&python=3.12&flags=verbose&gist=c3db401cf676c8c593dec1c525f7e748

Mypy Version: 1.20.0+dev.d06d3d9cfd6611c0e64c0df59fc0449754e47ed8

Fixed by: #20419

See Also: #20416

from typing import Literal, Mapping, Iterable
def func(a: int, b: int) -> None: ...

class GOOD_KW:
    def keys(self) -> Iterable[Literal["a", "b"]]: ...
    def __getitem__(self, key: str) -> int: ...

class BAD_KW:
    def keys(self) -> Iterable[Literal["one", 1]]: ...
    def __getitem__(self, key: str) -> int: ...

def test(
    good_kw: GOOD_KW,
    bad_kw: BAD_KW,
    good_dict: dict[Literal["a", "b"], int],
    bad_dict: dict[Literal["one", 1], int],
    good_mapping: Mapping[Literal["a", "b"], int],
    bad_mapping: Mapping[Literal["one", 1], int],
) -> None:
    func(**good_kw)
    func(**bad_kw)  # E: Argument after ** must have string keys
    func(**good_dict)
    func(**bad_dict)  # E: Argument after ** must have string keys
    func(**good_mapping)  # ❌️ False positive
    func(**bad_mapping)  # E: Argument after ** must have string keys

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 mit dem verlinkten mypy-play-Reproducer und vergleiche die Fälle GOOD_KW, BAD_KW, dict und Mapping. Lies #20419, das der Issue als Fix identifiziert, und #20416 für verwandten Kontext. Als erledigt gilt die Aufgabe, wenn der Mapping-Fall kein falsch positives Ergebnis mehr meldet, während die ungültigen Fälle mit Nicht-String-Schlüsseln weiterhin Fehler erzeugen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
devtools
Issue-Typ
Bug
Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
15/100

Neue Issues direkt in Ihr Postfach

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