考虑到阶乘函数的递归实现-
from typing import Optional
def factorial(val: int) -> Optional[int]:
if val<0:
return None
if val==0:
return 1
return val*factorial(val-1)
if __name__ == "__main__":
print(square_root(3))我使用mypy进行静态类型检查。它让我犯了以下错误-
type-hints.py:8: error: Unsupported operand types for * ("int" and "None")
type-hints.py:8: note: Right operand is of type "Optional[int]"
Found 1 error in 1 file (checked 1 source file)我试着按照Optional的堆栈溢出问题使用this。但似乎不起作用。有什么建议吗?
Questions -
当函数返回None
int和None之间可能发生乘法的情况。例如,如果我为val参数移除int并使用浮点数调用阶乘函数,它可能会抛出这样的错误。发布于 2020-08-22 20:01:30
MyPy是正确的,该函数不是很好的类型.函数的签名是(int) -> Optional[int],这使得val*factorial(val-1)可能出错。只为None发生的val < 0不是静态类型信息。
不要返回无效输入的None,而是引发异常。这使得函数静态地输入良好,而不删除错误处理。
def factorial(val: int) -> int:
if val<0:
raise ValueError("factorial() not defined for negative values")
if val==0:
return 1
return val*factorial(val-1)如果出于某种原因需要返回None,则显式注释该表达式是声音的,不需要检查。
def factorial(val: int) -> int:
if val<0:
return None
if val==0:
return 1
return val*factorial(val-1) # type: ignorehttps://stackoverflow.com/questions/63540516
复制相似问题