Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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
Python 3.x 对返回None的函数进行类型检查_Python 3.x_Mypy_Typechecking_Static Typing_Python Typing - Fatal编程技术网

Python 3.x 对返回None的函数进行类型检查

Python 3.x 对返回None的函数进行类型检查,python-3.x,mypy,typechecking,static-typing,python-typing,Python 3.x,Mypy,Typechecking,Static Typing,Python Typing,考虑阶乘函数的递归实现- 从输入导入可选 def阶乘(val:int)->可选[int]: 如果valMyPy正确,则表示函数类型不正确。函数的签名是(int)->可选的[int],这使得val*阶乘(val-1)可能是错误的。None仅在valint: 如果val int: 如果你能澄清你期望的行为是什么阶乘的类型为(int)->可选[int],因此val*factorial(val-1)的类型为:int*:可选[int]。MyPy无法知道None只出现在val

考虑阶乘函数的递归实现-

从输入导入可选
def阶乘(val:int)->可选[int]:

如果valMyPy正确,则表示函数类型不正确。函数的签名是
(int)->可选的[int]
,这使得
val*阶乘(val-1)
可能是错误的。
None
仅在
val<0
时出现,这不是静态类型信息

对于无效输入,不要返回
None
,而是引发异常。这会使函数静态地类型化,而不会删除错误处理

def阶乘(val:int)->int:
如果val int:

如果你能澄清你期望的行为是什么<代码>阶乘
的类型为(int)->可选[int],因此
val*factorial(val-1)
的类型为
:int*:可选[int]
。MyPy无法知道
None
只出现在
val<0
中。你能回答我的第一个问题吗?酷,这可能是一种方法。但是它是否与
mypy
python
版本有关。例如,我在看,如果你在5:00-5:30左右检查,这家伙没有遇到任何错误&他似乎在使用3.6可选的处理在过去要宽松得多,并且正在慢慢改变为一致的静态键入。例如,请参见。具体地说,MyPy的早期版本允许隐式None,并且会默默地忽略None上的无效操作。