Dict update typing error, update Dict[Union[int, str], str] from Dict[int, str]
オープン
まだ誰も着手していません。
bug
- 主要言語
- Python
- スター
- 20.6k
- フォーク
- 3.3k
- PR マージ指標
- PR 指標を取得中
説明
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)
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず mypy 1.5.1 で Python の再現コードを実行し、報告された update エラーを反復的な更新の例と比較します。MutableMapping.update に使われている型付けを追跡し、dict[int, int] がエラーなしで Dict[Union[int, str], int] を更新できることを示すリグレッションテストを追加します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- devtools
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100