python / python/mypy

Special-case .pop() on TypedDict

Offen
#18,296 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

feature
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Mypy doesn't respect TypedDict object changes. As an example, the following snippet

from typing import TypedDict

class A(TypedDict, total=False):
    a: str

def func(a: str) -> None:
    pass

data: A = {"a": "a"}
a = data.pop("a", "")
func(a, **data)

Raises the error:

error: "func" gets multiple values for keyword argument "a" [misc]

Formally, it is correctly, but it will be nice if mypy respects object keys changes. Especially in Unpack case:

from typing import Unpack, TypedDict

class A(TypedDict, total=False):
    a: str
    
def func(a: str) -> None:
    pass
    
def func2(**data: Unpack[A]) -> None:
    a = data.pop("a", "")
    func(a, **data) 

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, die beiden TypedDict-Beispiele mit mypy zu reproduzieren, wobei du dich auf .pop() gefolgt von Keyword-Unpacking und die Behandlung von Unpack konzentrierst. Verfolge die bestehenden Pfade zur TypedDict-Schlüsselverfolgung und zur Diagnose doppelter Schlüssel; abgeschlossen ist die Aufgabe, wenn gültiger Code, der den entfernten Schlüssel verwendet, keinen Fehler wegen eines doppelten Keyword-Arguments mehr meldet, während ungültige Fälle weiterhin diagnostiziert werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
devtools
Issue-Typ
Feature
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

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