python / python/mypy

Dict update typing error, update Dict[Union[int, str], str] from Dict[int, str]

Ouverte
#16,072 1 commentaire 2 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

bug
Langage dominant
Python
Étoiles
20.6k
Forks
3.3k
Métriques de merge des PR
Métriques de PR en attente

Description

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)

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par exécuter la reproduction Python avec mypy 1.5.1 et comparez l’erreur de mise à jour signalée avec l’exemple de mise à jour itérative. Suivez le typage utilisé pour MutableMapping.update et ajoutez un test de régression montrant que dict[int, int] peut mettre à jour Dict[Union[int, str], int] sans erreur.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
devtools
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.