use*_*882 5 python types type-hinting mypy
我有以下内容test.py:
def f(x: int) -> float:
pass
if __name__=="__main__":
f(4)
Run Code Online (Sandbox Code Playgroud)
当我运行时mypy --strict test.py,我没有收到任何错误。
我预计mypy能够推断出我的定义有问题f。它显然没有return声明,并且永远不能返回浮点数。
我觉得这里有些基本的东西我不明白。语句是否存在return是可以静态检查的。为什么会mypy错过呢?
您使用的语法被识别为函数存根,而不是函数实现。
通常,函数存根写为:
def f(x: int) -> float: ...
Run Code Online (Sandbox Code Playgroud)
但这只是为了方便
def f(x: int) -> float: pass
Run Code Online (Sandbox Code Playgroud)
来自 mypy文档:
功能体无法完全去除。按照惯例,我们将它们替换为
...而不是pass声明。
由于 mypy 不会检查函数体中的存根,因此在这种情况下不会出现错误。正如 @domarm 在评论中指出的,在函数体中添加除pass(甚至第二条pass语句)之外的任何语句都会导致预期的 mypy 错误。
| 归档时间: |
|
| 查看次数: |
1423 次 |
| 最近记录: |