Nondeterministic type-var error with LiteralString-bounded TypeVars
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
After upgrading from mypy 1.19.0 to 1.19.1, we're experiencing nondeterministic type checking behavior:
- Without
type: ignore[type-var]: Sometimes reports "Value of type variable 'S' of 'Response' cannot be 'object'" [type-var] - With
type: ignore[type-var]: Sometimes reports "Unused 'type: ignore[type-var]' comment" [unused-ignore]
The error state is inconsistent and appears related to PR #20345 (which fixed issue #20344 about nondeterministic behavior with tuple type vars).
Environment
- Mypy version: 1.19.1
- Python version: 3.13
- Upgraded from: mypy 1.19.0 (no errors)
Example
Granted, this is a simplified, sanitized example I have extracted from our code base but I believe it highlights the case where the issue is happening
from typing import LiteralString
class Container[S: LiteralString, T]:
"""A container with a LiteralString key."""
def __init__(self, key: S, value: T) -> None:
self.key = key
self.value = value
class Response[S: LiteralString, T]:
"""A response parameterized by LiteralString."""
def __init__(self, container: Container[S, T]) -> None:
self.container = container
def process[S: LiteralString, S1: LiteralString](
containers: list[Container[S, int] | Container[S1, str]],
) -> dict[int, Response]:
"""Create responses from a union of containers with different LiteralString keys."""
return {
i: Response(container) # May error: type-var or unused-ignore
for i, container in enumerate(containers)
}
Scenario 1: With type: ignore[type-var] comment
example.py:28: error: Unused "type: ignore[type-var]" comment [unused-ignore]
Scenario 2: Without the comment (in different contexts)
Sometimes passes with no errors, sometimes shows:
example.py:28: error: Value of type variable "S" of "Response" cannot be "object" [type-var]
I'm not able to nail down exactly when each scenario surfaces but hopefully this is enough to go on as it otherwise presents as a regression since 1.19.0
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 mitgelieferte Beispiel mit mypy 1.19.0 und 1.19.1 auszuführen, jeweils mit und ohne den Kommentar type: ignore[type-var], und vergleiche die Diagnosen. Lies PR #20345 und issue #20344 zum verwandten nichtdeterministischen Verhalten von Tuple-TypeVars; abgeschlossen ist die Aufgabe, wenn der durch LiteralString beschränkte TypeVar-Fall ein deterministisches, korrektes Ergebnis liefert.
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
- 35/100