下記コードでエラーが出る原因を知りたいです。
下記の中で、hoge
は、引数 type_
に応じて str
か int
を返します。
fuga
の中でこれを呼び出してリストの中に入れると、型チェックでエラーになります。
python
1@overload 2def hoge(number: int, type_: Literal["STRING"]) -> str: 3 ... 4 5@overload 6def hoge(number: int, type_: Literal["INTEGER"]) -> int: 7 ... 8 9def hoge(number: int, type_: Literal["STRING", "INTEGER"]) -> str | int: 10 if type_ == "STRING": 11 return str(number) 12 else: 13 return number 14 15def fuga(type_: Literal["STRING", "INTEGER"]): 16 piyo: list[str] | list[int] = [hoge(i, type_) for i in range(3)] # ここでエラー 17 print(piyo)
エラーの内容
Expression of type "list[str | int]" cannot be assigned to declared type "list[str] | list[int]"
実際に fuga()
を実行すると、(当然ながら)下記の通りです。
>>> fuga("STRING") ['0', '1', '2'] >>> fuga("INTEGER") [0, 1, 2]
fuga
の中で type_
は "STRING"
か "INTEGER"
のどちらか一方に決まっているので、 piyo
の型は list[str | int]
ではなく list[str]
か list[int]
のどちらか一方のはずです。
このエラーを解決する方法はありますでしょうか?
(list[str | int]
は、例えば [0, '1', 2]
のようにリストの要素に str
と int
が混ざったものを含むと理解していますが合っていますでしょうか?)

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/02/06 04:17 編集
2023/02/07 01:28
2023/02/14 08:20