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(从不返回)。