是否可以禁止mypy的“ Expected TypedDict键为字符串文字”警告?

时间:2019-12-15 01:42:38

标签: python mypy

我正在将mypy集成到现有的代码库中,其中包含一些此类代码实例:

def foo(bar: str) -> Dict[str, QuuxType]:
    # do stuff
    return {
        bar: some_quuxtype_value,
    }

请注意,返回的dict中的键被设置为输入变量(我知道这似乎有点代码味道,但是考虑到该选项,我稍后会尝试解决。) / p>

在此部分代码上运行mypy会产生警告:

  

预计TypedDict键为字符串文字

是否有禁用此警告的选项?快速浏览the mypy config docs之后,我找不到太多提及。

1 个答案:

答案 0 :(得分:0)

尽管您没有提供足够的上下文,但我将假设您尝试使用变量而不是字符串访问TypedDict的键。

在下面的示例中,我有一个示例,其中使用字符串文字访问键是可行的,而在另一个示例中,它将失败(但错误已得到抑制)。

from typing import TypedDict

class Foo(TypedDict):
    fruit: str
    veggie: str

foo_instance: Foo = {'fruit': 'apple', 'veggie': 'carrot'}
print(foo_instance['fruit']) # will work

# will error unless ignored
for key in foo_instance.keys():
    print(foo_instance[key]) # type: ignore

看到这个可爱的游乐场:https://mypy-play.net/?mypy=latest&python=3.8&gist=3513b1411b6795fb2299cf8c0e451b3f

Github上讨论了这个怪癖:

我们不支持,不。我认为如果给键一个 文字类型,但这似乎没有什么用。

我们绝对无法使用动态版本 我认为是类型检查。最好的举动可能是#类型:忽略