generic fails to narrow, something to do with using `NoReturn` on contravariant generic
Offen
Dieses Issue hat noch niemand übernommen.
bug
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
from typing import Generic, Mapping, NoReturn, Sequence, TypeVar
T = TypeVar("T", contravariant=True)
class Foo(Generic[T]):
...
foo = Foo[int]()
bar = Foo[str]()
a1: Sequence[Foo[NoReturn]] = [foo] # no error
a2: Sequence[Foo[NoReturn]] = [bar] # no error
# error (this one seemed to be fixed around commit 32448b88370f8327c390f4e21666065c87ca95e2, then broken again)
a3: Sequence[Foo[NoReturn]] = [foo, bar]
a4: Sequence[Foo[NoReturn]] = [foo] or [bar] # error
a5: Mapping[str, Sequence[Foo[NoReturn]]] = { # error
"foo": [foo],
"bar": [], # error goes away if you change this to [foo]
}
a6: Sequence[Sequence[Foo[NoReturn]]] = [[foo], []] # error
https://mypy-play.net/?mypy=latest&python=3.10&gist=175deca029e02ea95af74f7c4a02856c
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, die sechs Beispiele in der verlinkten mypy-play-Reproduktion auszuführen, und halte die aktuellen Diagnosen fest, insbesondere für a3–a6. Vergleiche das Verhalten mit Commit 32448b88370f8327c390f4e21666065c87ca95e2 als historischem Kontext. Als erledigt gilt die Aufgabe, wenn die inkonsistenten Fehler für äquivalente Foo[NoReturn]-Konstruktionen behoben sind, ohne neue Fehler einzuführen.
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