如何在MyPy

时间:2018-01-05 15:39:36

标签: python-3.x optional typing static-typing mypy

我有一个函数可能返回一个值(然后它必须是一个int)或者表现得像一个过程(即它根本不调用return,然后有效地返回None)。你可能已经猜到了,这是众所周知的模式中的main()函数:

if __name__ == '__main__':
    import sys
    sys.exit(main(sys.argv))

为此准备了sys.exit()函数,它同等地接受intNone

有些main()个函数只是在没有明确return的情况下终止,其他return是明确的int。我想在常量输入中声明这一点,以便将我的main()从“不返回任何内容”更改为“返回退出代码”并不意味着我必须调整输入声明。

我的试验:

def main(argv: List[str]) -> Optional[int]:
    print_something()

(然后MyPy抱怨缺少return陈述。)

def main(argv: List[str]) -> Union[int, None]:
    print_something()

(与上述相同。)

def main(argv: List[str]) -> Optional[int]:
    print_something()
    return

(“错误:预期的返回值”:怒气:)

def main(argv: List[str]) -> Optional[int]:
    print_something()
    return None

(噢,来吧。但是有效。是的。我最后对无用的return None感到不满意。我认为Optional已经明确表示不会有任何遗漏。)< / p>

def main(argv: List[str]) -> Any:
    print_something()

(当然可以,但使用Any过于笼统。静态类型检查器无法找到意外返回的字符串。)

我有没有想过要实现我想要的东西?

1 个答案:

答案 0 :(得分:0)

  

(噢,来吧。但是工作,是的。我最后对无用的return None不满意。我认为Optional已经明确表示不会返回任何内容。)

我认为Optional表明它可能会返回可选值。 IE浏览器。 int。我相信你仍然需要把预期的回报值。在这种情况下,它将是None

关于None作为返回值here

的讨论很好

另请参阅mypy docs有关严格的可选类型和无检查