Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从带有mypy注释的python函数返回None,多个返回类型_Python_Function_Return Type_Static Typing_Mypy - Fatal编程技术网

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

从带有mypy注释的python函数返回None,多个返回类型,python,function,return-type,static-typing,mypy,Python,Function,Return Type,Static Typing,Mypy,我有打字的背景。我正在将静态类型检查引入一个python项目(使用mypy) 在Typescript中,从一个函数返回null是有效的,该函数被注释为返回其他内容,即字符串: 函数测试(标志:布尔):字符串{ 国际单项体育联合会(旗){ 回归"成功",; }否则{ 返回null; } } 将函数注释为具有多个潜在返回类型也是有效的,即字符串或布尔值: 函数测试(标志:布尔):字符串|布尔{ 国际单项体育联合会(旗){ 回归"成功",; }否则{ 返回false; } } 但是,在使用mypy

我有打字的背景。我正在将静态类型检查引入一个python项目(使用mypy)

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

函数测试(标志:布尔):字符串{
国际单项体育联合会(旗){
回归"成功",;
}否则{
返回null;
}
}
将函数注释为具有多个潜在返回类型也是有效的,即字符串或布尔值:

函数测试(标志:布尔):字符串|布尔{
国际单项体育联合会(旗){
回归"成功",;
}否则{
返回false;
}
}
但是,在使用mypy的python中,不允许从注释为return
str
的函数返回None

def测试(标志:bool)->str:
如果标志:
返回“成功”
其他:
一无所获
#[mypy]错误:返回值类型不兼容(得到“None”,应为“str”)
此外,我没有看到注释多个返回类型的方法,即
str | None


我应该如何使用mypy处理类似的事情?从错误状态返回None的函数遍布我的代码库。

好的,多亏mypy gitter上的@zsol,我在文档中找到了我缺少的东西

两个有用的mypy特性是可选类型和联合类型,它们可以从python的类型化模块导入

如果要注释该函数除了主类型之外可能不返回任何值,例如
str
,请使用
可选

从输入导入可选
def测试(标志:bool)->可选[str]:
如果标志:
返回“成功”
其他:
一无所获
如果要注释函数可能返回多种类型,例如
str | bool
,请使用
Union

从键入import Union开始
def测试(标志:bool)->联合[str,bool]:
如果标志:
返回“成功”
其他:
返回错误

你能返回一个空字符串吗?这是合乎逻辑的:在Python中,
None
不是一个“空引用”,它是一个对象(就像任何其他对象一样),它的类型是
NoneType
@WillemVanOnsem是的,Python中的None类型不同于javascript中的空引用。