python / python/mypy

`--strict-equality` flag not working with membership operator and `Literal` types

Offen
#17,062 0 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

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

Beschreibung

Bug Report

When using any container (set, frozenset, list, tuples...) containing Literal based types, the --strict-equality is not detecting any issues when I use the membership operator in a non-overlapping check.

To Reproduce

from typing import Literal

OPTIONS = Literal["a", "b"]
var: list[OPTIONS] = ["a"]
if "c" in var:  # MYPY OK
    pass

Expected Behavior

When the flag --strict-equality is set, I would expect that mypy raises an erorr here. Same as it does when I do a non-overlapping equality check:

from typing import Literal

OPTIONS = Literal["a", "b"]
var: list[OPTIONS] = ["a"]
if var[0] == "c":  #  error: Non-overlapping equality check (left operand type: "Literal['a', 'b']", right operand type: "Literal['c']")  [comparison-overlap]
    pass

Actual Behavior

No errors are raised

Your Environment
Using Mypy version 1.9.0

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

Führe zunächst die gemeldete Python-Reproduktion mit --strict-equality aus und vergleiche ihre Membership-Prüfung mit der indizierten Gleichheitsprüfung. Finde die Einstiegspunkte für Strict-Equality und Membership-Analyse und füge anschließend einen Regressionstest hinzu, der einen Container mit Literal-Werten abdeckt. Als erledigt gilt die Änderung, wenn mypy für den Membership-Ausdruck eine Prüfung auf nicht überlappende Typen meldet, ohne gültige Membership-Prüfungen zu beeinträchtigen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
devtools
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 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.