You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python 3.8与mypy 1.4.1时多返回值赋值引发类型警告问题

解决mypy解构赋值字典时的类型警告

问题场景

使用Python 3.8和mypy 1.4.1时,执行如下代码会触发类型警告:

Expected type 'Dict[str, float]', got 'Dict[str, Tuple[float, float, float]]' instead

代码示例:

from typing import Dict, Tuple

def foo() -> Tuple[float, float, float]:
    return 1, 3, 5

a: Dict[str, float] = {}
a["asdf"], _, _ = foo()

问题原因

mypy对解构赋值的语法解析存在优先级判断偏差,它错误地将a["asdf"]识别为接收整个元组的目标,而非解构后的单个float元素,因此判定字典a的类型不符合声明。

解决方案

有两种简单的修复方式:

方式1:先解构元组再赋值

先将函数返回的元组解构到临时变量,再将目标元素赋值给字典:

from typing import Dict, Tuple

def foo() -> Tuple[float, float, float]:
    return 1, 3, 5

a: Dict[str, float] = {}
val, _, _ = foo()
a["asdf"] = val

方式2:用括号明确解构优先级

给整个解构赋值表达式加上括号,明确告诉mypy这是解构操作:

from typing import Dict, Tuple

def foo() -> Tuple[float, float, float]:
    return 1, 3, 5

a: Dict[str, float] = {}
(a["asdf"], _, _) = foo()

内容的提问来源于stack exchange,提问作者chuckyoungblood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:02:18