启用 mypy `strict_Optional 有什么优点吗?

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

您认为启用该选项有什么好处吗?现在它默认被禁用,我没有看到签名可读性或其他方面有任何好处。

python typing mypy
2个回答
5
投票

嗯,任何严格的类型检查都有其好处。我总是启用此检查,并使用

None
注释来注释任何可以采用
Optional[T]
的变量,因为这使得
mypy
能够捕获缺失的空检查并防止讨厌的
'NoneType' object has no attribute
运行时错误。

但是,我也理解为什么人们不想启用它。相当多的代码广泛利用了 Python 的动态特性,对它们进行注释会很乏味。有些人可能也不喜欢冗长的写作

Optional[]
。对我来说,支票的好处超过了细微差别,但您的里程可能会有所不同。

由于Python类型注释的目标是“渐进式打字”,这意味着类型不是必需的,并且您可以拥有部分注释的代码,因此没有太严格的默认设置可能有利于此类工具的采用。


0
投票

启用

--no-strict-optional
会导致类型检查无效,并且违反了静态类型的最基本规则。

如果您有某个函数参数

x: T
,并且将
None
分配给它,则静态类型检查器应该 only 接受
T
None
的类型或超类型(即
NoneType
object
),或者
Any
。否则应该被拒绝。

但是如果你使用

--no-strict-optional
,那么这不再成立,那就是类型不安全

mypy 文档对此也非常清楚:

--no-strict-optional
是邪恶的。避免使用它,并且在不了解它的作用之前绝对不要使用它。


我还建议不要使用

--implicit-optional
,它会隐式地将
| None
附加到参数,并默认使用
None
。尽管这不像
--no-strict-optional
那样类型不安全,但它同样无效。还有著名的规则。 2 个
import this

Explicit is better than implicit.
© www.soinside.com 2019 - 2024. All rights reserved.