[Bug] Using `filter` in `itertools.chain` makes them both infer wrong types.
Dieses Issue hat noch niemand übernommen.
- 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
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Ö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