python / python/mypy

[Bug] Using `filter` in `itertools.chain` makes them both infer wrong types.

Offen
#8,226 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug topic-inference topic-join-v-union
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Repro:

import itertools
from typing import List

x: List[int] = [1, 2, 3]
y: List[str] = ["  ", "", "abc"]


it = itertools.chain(x, filter(lambda s: s.strip() == "", y))
reveal_type(it)

Actual output:

main.py:8: error: "object" has no attribute "strip"
main.py:9: note: Revealed type is 'itertools.chain[builtins.object*]'

Expected output:
I was expecting no errors and didn't expect filter to be affected by what it is put in, i.e. if you put filter call separate from itertools.chain, it prevents the first errors about missing strip attr:

f = filter(lambda s: s.strip() == "", y)
it = itertools.chain(x, f)
reveal_type(it)

The revealed type is still wrong though.


Python version: 3.7.6
Mypy version: 0.760 (still occurs on master)
Used flags: --strict

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

Beginne damit, das bereitgestellte Beispiel mit mypy 0.760 oder dem aktuellen master unter --strict zu reproduzieren und dabei die Inline- und die separate Filterform zu vergleichen. Der Payload nennt keine Quelldateien oder Tests; abgeschlossen ist es, wenn die Inline-Form kein fehlendes strip-Attribut meldet und statt object einen geeigneten Typ des Kettenglieds offenlegt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
devtools
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
38/100

Neue Issues direkt in Ihr Postfach

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