“void”函数中的NoReturn与None - 在Python 3.6中键入注释

时间:2017-12-30 21:45:28

标签: python annotations python-3.6 type-hinting typing

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

1 个答案:

答案 0 :(得分:7)

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(它永远不会返回)..