python / python/mypy

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

Offen
#11,916 0 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
Ø Merge
1 T. 18 Std.
Gemergte PRs (30 T.)
54

Beschreibung

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):

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ühren Sie das bereitgestellte Beispiel test.py über die mypy CLI aus und vergleichen Sie die Versionsbedingung mit drei Komponenten mit der Form mit zwei Komponenten sowie dem berichteten Verhalten in mypy 0.910, 0.920 und 0.930. Verfolgen Sie die Prüfung der Erreichbarkeit der Versionsbedingung und verifizieren Sie, dass der nicht erreichbare Import-Zweig keine Fehler mehr erzeugt, während die erwartete erfolgreiche Ausgabe erhalten bleibt.

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

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.