Dict update typing error, update Dict[Union[int, str], str] from Dict[int, str]
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
To Reproduce
from typing import Dict, Union
dict_a: Dict[Union[int, str], int] = {}
dict_b: Dict[int, int] = {}
dict_a.update(dict_b)
print(dict_a)
Expected Behavior
No mypy error. dict_b has stricter typing than dict_a, this update operation should be fine.
Actual Behavior
error: Argument 1 to "update" of "MutableMapping" has incompatible type "dict[int, int]"; expected "SupportsKeysAndGetItem[Union[int, str], int]" [arg-type]
Your Environment
- Mypy version used: 1.5.1 (compiled: yes)
- Python version used: 3.9.16
Other Notes
updating items iteratively apparently has no issue.
from typing import Dict, Union
dict_a: Dict[Union[int, str], int] = {}
dict_b: Dict[int, int] = {}
for k, v in dict_b.items():
dict_b[k] = v
print(dict_a)
Using Any of course has no issue too.
from typing import Any, Dict
dict_a: Dict[Any, int] = {}
dict_b: Dict[int, int] = {}
dict_a.update(dict_b)
print(dict_a)
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 Python-Reproduktion mit mypy 1.5.1 auszuführen, und vergleiche den gemeldeten update-Fehler mit dem Beispiel für ein iteratives Update. Verfolge die für MutableMapping.update verwendete Typisierung und füge einen Regressionstest hinzu, der zeigt, dass dict[int, int] Dict[Union[int, str], int] ohne Fehler aktualisieren kann.
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