python / python/mypy

Inference for Literal arguments not handled

Offen
#11,003 6 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug topic-literal-types
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Bug Report

If you have a function with Literal arguments, and a variable that is set to one of the options, an error is reported.

To Reproduce

from typing import Literal


def myfun(a: Literal["a", "b", "c"]) -> str:
    return a


s = "a"

myfun(s)


def myfun2(a: Literal[1, 2]) -> int:
    return a


b = 2
myfun2(b)

c = 1 if s == "a" else 2
myfun2(c)

reports

literalinf.py:10: error: Argument 1 to "myfun" has incompatible type "str"; expected "Union[Literal['a'], Literal['b'], Literal['c']]"
literalinf.py:18: error: Argument 1 to "myfun2" has incompatible type "int"; expected "Union[Literal[1], Literal[2]]"
literalinf.py:21: error: Argument 1 to "myfun2" has incompatible type "int"; expected "Union[Literal[1], Literal[2]]"

Expected Behavior

No error. The values can be inferred to be of the Literal value

Actual Behavior

See above.

Your Environment

  • Mypy version used: 0.910
  • Mypy command-line flags: None
  • Mypy configuration options from mypy.ini (and other config files): None
  • Python version used: 3.8.5
  • Operating system and version: Windows 10 21H1

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, den bereitgestellten Python-Reproducer mit mypy auszuführen, und verfolge, wie zugewiesene Werte und bedingte Ausdrücke beim Prüfen von Literal-Argumenten inferiert werden. Füge Abdeckung für die drei Aufrufe hinzu; die Arbeit ist abgeschlossen, wenn sie nicht mehr die gemeldeten inkompatiblen Typfehler erzeugen.

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

Neue Issues direkt in Ihr Postfach

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