gpt4 book ai didi

python - Mypy 无法从文字列表中推断出项目的类型

转载 作者:行者123 更新时间:2023-12-05 02:42:41 26 4
gpt4 key购买 nike

我有一个变量 x 和一个文字列表(比如 0、1、2)。我想将 x 转换为这些文字之一:如果 x 在列表中,我返回它;否则我返回一个后备值:

from typing import Literal, Set

Foo = Literal[0, 1, 2]
foos: Set[Foo] = {0, 1, 2}

def convert_to_foo(x: int) -> Foo:
if x in foos:
# x must have type Foo, yet this doesn't type check
y: Foo = x
return y
return 0

不幸的是,这没有类型检查。 Mypy 返回以下消息(参见 gist ):

main.py:9: error: Incompatible types in assignment (expression has type "int", variable has type "Union[Literal[0], Literal[1], Literal[2]]")

如果我属于 Foo 的列表,那么我就是一个 Foo,对吗?我在文档中找不到答案,有人可以指出正确的方向吗?

最佳答案

好问题。我认为 cast 可能是到达此处的唯一方法:

from typing import Literal, Set, cast

Foo = Literal[0, 1, 2]
foos: Set[Foo] = {0, 1, 2}

def convert_to_foo(x: int) -> Foo:
if x in foos:
y: Foo = cast(Foo, x)
return y
return 0

关于python - Mypy 无法从文字列表中推断出项目的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67367761/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com