python / python/mypy

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

Aperta
#20,424 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

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

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia con il reproducer mypy-play collegato e confronta i casi GOOD_KW, BAD_KW, dict e Mapping. Leggi #20419, che l’issue identifica come la correzione, e #20416 per il contesto correlato. Il lavoro è completato quando il caso Mapping non segnala più un falso positivo, mentre i casi con chiavi non valide non stringa continuano a produrre errori.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
devtools
Tipo di issue
Bug
Difficoltà
2/5
Tempo stimato
1-3 ore
Stato di attività
Ferma
Chiarezza
Specificata chiaramente
Idoneità per principianti
15/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.