python / python/mypy

sys.version_info reachability-check fails when patchlevel is specified in the version-condition

Aperta
#11,916 0 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

Apparent regression: mypy reachability check involving sys.version_info seems to fail when patchlevel is specified in the version condition.

To Reproduce

Run mypy CLI over the following code:

import sys

if sys.version_info < (3, 8, 0):
    import importlib_metadata as metadata
else:
    from importlib import metadata

my_metadata = metadata.metadata("mypy")  # just using mypy as an example here; could be any package's name

e.g.

mypy test.py

(tested under python 3.7)

Expected Behavior
Code should pass, with output like:

Success: no issues found in 1 source file

Actual Behavior

mypy reports issues, which appear to stem from a failure to flag some of the code as unreachable:

test.py:7: error: Module "importlib" has no attribute "metadata"
test.py:7: error: Name "metadata" already defined (by an import)
Found 2 errors in 1 file (checked 1 source file)

Your Environment

  • Mypy version used: 0.930
  • Python version used: 3.7.6
  • Operating system and version: MacOS Catalina 10.15.7

NOTES:

  • The example works fine under mypy 0.910; fails under 0.920 and 0.930.
  • The example works fine if the condition is changed to omit the python patchlevel, i.e. replace
if sys.version_info < (3, 8, 0):

with

if sys.version_info < (3, 8):

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

Esegui l’esempio test.py fornito tramite la CLI di mypy, confrontando la condizione di versione a tre componenti con la forma a due componenti e il comportamento riportato in mypy 0.910, 0.920 e 0.930. Traccia il controllo di raggiungibilità della condizione di versione e verifica che il ramo di importazione irraggiungibile non produca più errori, mentre l’output di successo previsto venga preservato.

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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.