python / python/mypy

Dict comprehension from Iterable of Literal

Offen
#7,814 3 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug false-positive priority-1-normal topic-literal-types
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Related to #7533
mypy 0.740, python 3.7.4, typing_extensions 3.7.4

dict comprehension won't recognize an Iterable of Literal as input.
Unlike in #7533, this is not limited to just tuples.

The dict constructor and dict.fromkeys have no problem.

from typing import Dict
from typing_extensions import Literal

T = Literal[1, 2, 3]
d: Dict[T, None]

d = {x: None for x in [1, 2, 3]}
# error: Key expression in dictionary comprehension has incompatible type "int"; expected type "Union[Literal[1], Literal[2], Literal[3]]"

d = dict(zip([1, 2, 3], [None, None, None]))  # no error
d = dict.fromkeys([1, 2, 3])  # no error

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 bereitgestellten Python-Reproducer und vergleiche die dict comprehension mit den funktionierenden Fällen dict constructor und dict.fromkeys. Erledigt ist es, wenn mypy die comprehension akzeptiert, die Literal-Schlüssel Dict[Literal[1, 2, 3], None] zuweist, ohne den Fehler wegen eines inkompatiblen Schlüsselausdrucks.

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
45/100

Neue Issues direkt in Ihr Postfach

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