从mypy,多个返回类型注释的python函数返回None

问题描述 投票:4回答:1

我来自一个Typescript背景,并将静态类型检查带入我正在研究的python项目中(使用mypy)。

在Typescript中,从注释为返回其他内容的函数返回null是有效的,即字符串:

function test(flag: boolean): string {
    if(flag) {
        return 'success';
    } else {
        return null;
    }
}

注释你的函数有多个潜在的返回类型也是有效的,即字符串或布尔值:

function test(flag: boolean): string | boolean {
    if(flag) {
        return 'success';
    } else {
        return false;
    }
}

但是,在使用mypy的python中,我不允许从注释为返回str的函数返回None。

def test(flag: bool) -> str {
    if(flag) {
        return 'success';
    } else {
        return None;
        # [mypy] error:Incompatible return value type (got "None", expected "str")
    }
}

此外,我没有看到注释多种返回类型的方法,即str | None。我应该如何使用mypy来处理这样的事情?从错误状态返回None的函数遍布我的代码库。

python function return-type static-typing mypy
1个回答
4
投票

好的,我在文件中找到了我遗漏的内容,感谢myz gitter上的@zsol!

两个有用的mypy功能是可以从python的输入模块导入的Optional和Union类型。 Documentation here.

如果你想注释除了主要类型之外该函数可能会返回None,即str使用Optional

from typing import Optional

def test(flag: bool) -> Optional[str] {
    if(flag) {
        return 'success';
    } else {
        return None;
    }
}

如果要注释该函数可能返回多种类型,即str | bool,请使用Union

from typing import Union

def test(flag: bool) -> Union[str, bool] {
    if(flag) {
        return 'success';
    } else {
        return false;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.