python / python/mypy

Covariance error inferred for lambda has invalid line number associated with it

Offen
#8,592 3 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug priority-0-high topic-error-reporting
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Versions

mypy 0.770
python 3.8.2

Description

This is probably related to the https://github.com/python/mypy/issues/4270

Problem is triggered when using recipe everything_except from hypothesis documentation:

https://hypothesis.readthedocs.io/en/latest/data.html#hypothesis.strategies.from_type

I have a file with following content (this is the whole file):

from typing import TypeVar

from hypothesis import strategies as st

_Ex = TypeVar("_Ex", covariant=True)


def everything_except(*types: type) -> st.SearchStrategy[_Ex]:
    strategy = st.from_type(type).flatmap(st.from_type)

    return strategy.filter(lambda x: not isinstance(x, types))  # type: ignore

Running mypy on first clean run (without .mypy_cache) has the following output:

example.py:1276: error: Cannot use a covariant type variable as a parameter
Found 1 error in 1 file (checked 1 source file)

For some reason, mypy sees error on line 1276 which does not exist. On the other hand, running mypy for the second time gives:

Success: no issues found in 1 source file

What's more, when you have pretty set to True, first run gives:

Traceback (most recent call last):
  File "/home/krprzyby/.local/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "/home/krprzyby/.local/lib/python3.8/site-packages/mypy/__main__.py", line 8, in console_entry
    main(None, sys.stdout, sys.stderr)
  File "mypy/main.py", line 89, in main
  File "mypy/build.py", line 180, in build
  File "mypy/build.py", line 249, in _build
  File "mypy/build.py", line 2649, in dispatch
  File "mypy/build.py", line 2956, in process_graph
  File "mypy/build.py", line 3073, in process_stale_scc
  File "mypy/errors.py", line 476, in file_messages
  File "mypy/errors.py", line 449, in format_messages
IndexError: list index out of range

Running mypy for the second time works correctly with pretty set to True because the line number is correct and # type: ignore works.

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

Reproduziere das bereitgestellte Beispiel mit einem leeren .mypy_cache und aktivierter Pretty-Ausgabe. Lies zunächst mypy/errors.py und die zugehörigen build.py-Pfade aus dem Traceback; fertig ist die Aufgabe, wenn der erste Lauf eine gültige Quellzeile meldet und keinen IndexError auslöst, während das Verhalten von type-ignore bei nachfolgenden Läufen konsistent bleibt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

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