Mypy 不考虑 if 条件

问题描述 投票:0回答:2

我有一个不同类型的字典,在我的代码中,在通过循环读取字典时,根据它的类型,我有不同的操作。该代码按预期工作,但 MYPY 抱怨它不正确。这是示例代码:

COL = {
    "ABC": [
        "col1",
        "col2",
        "col3",
    ],
    "BBC": [
        "col1",
        "col2",
        "col3",
    ],
    "XYZ": {
        "col1": "c1",
        "col2": "c2",
        "col3": "c3",
    },
}

list(COL[table_name].keys()) if isinstance(COL[table_name], dict) else COL[table_name]

Mypy 报错:error: "Collection[str]" has no attribute "values"

看起来没有考虑if条件。

尝试过 COL 的类型注释,但没有成功。

python mypy python-typing
2个回答
0
投票

Mypy 报告错误,因为不确定

COL[table_name]
在两次访问中是否相同。

如果引入中间变量,则不会报错:

游乐场链接

list(table.keys()) if isinstance(table := COL[table_name], dict) else table  # fine

0
投票

提取一个变量以向 mypy 显示表达式

COL[table_name]
始终引用同一个对象:

col = COL[table_name]
list(col.keys()) if isinstance(col, dict) else col
© www.soinside.com 2019 - 2024. All rights reserved.