python / python/mypy

Some string `in` `Union[bytes, str]` does not produce an error

Aperta
#9,822 1 commento 0 reazioni 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

Given the following code

from typing import Union

foo: Union[str, bytes]  
"zoo" in foo  # no error
"zoo" + foo  # err: Unsupported operand types for + ("str" and "bytes")

I would have expected that mypy complains about str not compatible with bytes just like it does for the + operand.

I've tried the current typeshed version at 3d140160 because it just looked like there was a change here in Oct 2020 after mypy 0.790.

For example it now defines for class(str):

    def __contains__(self, o: Union[str, str]) -> bool: ...  # type: ignore
...
    def __iter__(self) -> Iterator[str]: ...

(__contains__ does not trigger here but its Union[str, str] is weird.)

Your Environment

mypy 0.790
python 3.8
builtin typeshed and @3d140160
Win 10

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 riproducendo l’esempio Union[str, bytes] con mypy 0.790, quindi esamina le definizioni di typeshed per str.contains e la gestione correlata di Union. Confronta le diagnosi per "zoo" in foo e "zoo" + foo; il lavoro è completato quando l’espressione di contenimento segnala il caso incompatibile str/bytes in modo coerente con l’espressione di addizione.

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

Valutazione

Stack tecnologico
python
Ambito
devtools
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.