我来自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的函数遍布我的代码库。
答案 0 :(得分:4)
好吧,由于mypy gitter上的@zsol,我发现了文档中缺少的东西!
mypy的两个有用功能是Optional和Union类型,可以从python的输入模块中导入它们。 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;
}
}