python / python/mypy

str not compatible with StrOrLiteralStr

Aperta
#15,848 2 commenti 1 reazione 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

Bug Report

mypy doesn't accept str for StrOrLiteralStr

To Reproduce

from string import Formatter
from typing import Iterable, Tuple

class MyFormatter(Formatter):
    def parse(self, s: str) -> Iterable[Tuple[str, str, str, str]]:
        for text, field, spec, conversion in super().parse(s):
            yield "a", "b", "c", "d"

(playground)

Actual Behavior

error: Return type "Iterable[tuple[str, str, str, str]]" of "parse" incompatible with return type "Iterable[tuple[StrOrLiteralStr, StrOrLiteralStr | None, StrOrLiteralStr | None, StrOrLiteralStr | None]]" in supertype "Formatter" [override]

Details

I've asked a question on SO about this and didn't get an answer (yet). As indicated in the comments:

this code passes type checking in mypy 0.971, and fails in mypy 0.981 through 1.5.0

Perhaps it's related to mypy lack of support for LiteralStr #12554

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 l'override di Formatter.parse nel reproducer Python ed eseguilo nel mypy playground collegato, confrontando il comportamento tra le versioni menzionate. Traccia il modo in cui mypy gestisce StrOrLiteralStr e il tipo restituito dall'override; il lavoro è completato quando il reproducer viene accettato senza rifiutare erroneamente str.

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

Valutazione

Stack tecnologico
python
Ambito
compilers
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
38/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.