为什么 `mypy --strict` 在这个简单的代码中不会抛出错误?

问题描述 投票:0回答:1

我在

test.py
中有以下内容:

def f(x: int) -> float:
    pass

if __name__=="__main__":
  f(4)

当我运行

mypy --strict test.py
时,我没有收到任何错误。

我预计

mypy
能够推断出我的定义有问题
f
。它显然没有
return
语句,并且永远不能返回浮点数。

我觉得这里有一些基本的东西我不明白。

return
语句是否存在可以静态检查。为什么
mypy
会错过?

python python-typing mypy
1个回答
4
投票

您使用的语法被识别为函数存根,而不是函数实现。

通常,函数存根写为:

def f(x: int) -> float: ...

但这只是为了方便

def f(x: int) -> float: pass

来自 mypy 文档

功能体无法完全移除。按照惯例,我们将它们替换为

...
而不是
pass
语句。

由于 mypy 不会检查函数体中的存根,因此在这种情况下不会出现错误。正如 @domarm 在评论中指出的,在函数体中添加除

pass
之外的任何语句(甚至第二个
pass
语句)都会导致预期的 mypy 错误。

© www.soinside.com 2019 - 2024. All rights reserved.