python 3.6支持类型注释,例如:

def foo() -> int:
    return 42

但是,当函数没有返回任何内容时,应该使用什么?PEP484示例大多使用None作为返回类型,但也有来自NoReturn包的typing类型。
因此,问题是什么是更好的使用,什么是最佳实践:
def foo() -> None:
    #do smth


from typing import NoReturn

def foo() -> NoReturn:
    #do smth

最佳答案

noreturn表示函数从不返回值。
函数要么不终止,要么总是引发异常:"The typing module provides a special type NoReturn to annotate functions that never return normally. For example, a function that unconditionally raises an exception.."

from typing import NoReturn

def stop() -> NoReturn:
    raise RuntimeError('no way')

也就是说,x = foo_None()是类型有效的,但可疑的,x = foo_NoReturn()是无效的。
除了没有可分配的结果,noreturn在分支分析中还有其他含义:foo_NoReturn(); unreachable..'A NoReturn type is needed #165'票中有进一步讨论。
为了执行分支分析,必须知道哪些调用将永远不会正常返回。例如sys.exit(总是通过异常返回)和os.exit(从不返回)。

07-24 14:15