微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不确定为什么会生成mypy“分配中的不兼容类型”

如何解决不确定为什么会生成mypy“分配中的不兼容类型”

让我感到困惑的简单示例:

for (String artist : artists) {
    String[] split = artist.split(" ");
    // add some data validation to avoid ArrayIndexOutOfBounds
    String name = split[0];
    String genre = split[1];
}

mypy抱怨“ your_func2”具有不兼容的类型: from typing import Callable,List,Union Value = Union[bool,int,str] Helper = Callable[[Value],List[Value]] def func_with_alias(aa: Value) -> List[Value]: return [] def func_with_type(aa: bool) -> List[Value]: return [] your_func1: Helper = func_with_alias your_func2: Helper = func_with_type

为什么error: Incompatible types in assignment (expression has type "Callable[[bool],List[Union[bool,str]]]",variable has type "Callable[[Union[bool,str]],str]]]")bool中却不让我这样做?

Union[bool,str]

解决方法

让我们看看您在类型定义中的意思:

Value = Union[bool,int,str]

值可以是布尔值,整数或字符串。

Helper = Callable[[Value],List[Value]]

帮助程序获取值并返回值列表。

现在分配出现错误:

def func_with_type(aa: bool) -> List[Value]:
    return []

your_func2: Helper = func_with_type

func_with_type仅接受布尔值,但是您将其分配给应该也可以接受整数或字符串的类型。


要了解为什么这样做没有意义,请考虑以下Helper函数的消费者

def consumer(func: Helper) -> List[Value]:
     return func("Hello,world!")

Helper可以使用Valueboolint的{​​{1}},因此这种用法应该很好。但是str仅接受func_with_type,因此无法以这种方式调用,因此我们不能将其视为bool


我实际上正在做的是建立一个具有 实际的类(例如bool,int或str)和一个函数的值 处理它。返回值是一个值列表(例如bool,int或 str)。

可能想要的是generic函数,其中泛型类型受联合约束:

Helper

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。