ByA*_*enT 7 python annotations typing type-hinting python-3.6
Python 3.6支持类型注释,如:
def foo() -> int:
return 42
Run Code Online (Sandbox Code Playgroud)
但是当函数没有返回任何内容时,预期会使用什么?PEP484示例主要None
用作返回类型,但也有包中的NoReturn
类型typing
.
所以,问题是什么是更好的使用和什么被认为是最佳实践:
def foo() -> None:
#do smth
Run Code Online (Sandbox Code Playgroud)
要么
from typing import NoReturn
def foo() -> NoReturn:
#do smth
Run Code Online (Sandbox Code Playgroud)
use*_*740 10
NoReturn表示函数永远不会返回值.
该函数要么不终止,要么总是抛出异常:"输入模块提供了一个特殊的类型NoReturn来注释永远不会正常返回的函数.例如,一个无条件地引发异常的函数.".
from typing import NoReturn
def stop() -> NoReturn:
raise RuntimeError('no way')
Run Code Online (Sandbox Code Playgroud)
也就是说,x = foo_None()
类型有效但怀疑x = foo_NoReturn()
是无效的.
除了没有可分配的结果外,NoReturn在分支分析中也有其他含义:foo_NoReturn(); unreachable..
.在'A NoReturn
type is needed#165'票证中有进一步的讨论.
为了执行分支分析,有必要知道哪些调用永远不会正常返回.示例是sys.exit(总是通过异常返回)和os.exit(永远不会返回).