python / python/mypy

mypy fails to recognize functions as generators when `sys.platform` is used in conditions

Aperta
#5,678 2 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug priority-1-normal topic-runtime-semantics
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

mypy seems to be too thorough when interpreting if sys.platform == ... conditions. Consider the following file:

import sys
from typing import Generator

def f() -> Generator[int, None, None]:
    if sys.platform == "darwin":
        yield 1

I'm trying to run mypy for this file on Linux using mypy gen.py

Expected behavior:
mypy test passes for this file on Linux

Actual behavior:
I get this on Linux:

$ mypy gen.py 
gen.py:4: error: Missing return statement

At the same time, mypy on macOS does not complain. I think that this is related to #698

Platform information:

$ uname -sr; mypy --version; python --version
Linux 4.15.0-34-generic
mypy 0.630
Python 2.7.15rc1

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

Riproduci il report usando l'esempio gen.py ed esegui mypy su Linux, quindi confronta il risultato con il comportamento su macOS. Traccia il modo in cui il checker gestisce le condizioni di sys.platform e le funzioni generatrici; il lavoro è completato quando l'esempio non segnala più un'istruzione return mancante su Linux senza introdurre regressioni nel risultato su macOS.

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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.