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
答案 0 :(得分:7)
NoReturn表示函数永远不会返回值。
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(它永远不会返回)..