我有点困惑为什么PyCharm不区分两种不同的可选类型
考虑下面的代码。
def funcs(foo:Optional[str]=None):
print(foo)
def funci(var:Optional[int]=None):
funcs(var)
argi = 1
args = "something"
argn = None
funcs(argi)
funcs(args)
funcs(argn)
注意funci
内的funcs
调用没有发现将可选的[int]传递给正在查找Optional[str]
的函数的问题
然而,如果我们去掉Optional[str]
,检查就会发出吠声
这是预期行为吗?如果是,我能做些什么
我的直觉告诉我,类型检查应该足够聪明,能够区分Optional[str]
和Optional[int]
之间的区别。我通读了{a3}和{a4}都没有用
如果使用默认检查设置在当前版本的PyCharm(2021.1)中进行测试,则删除
funcs
参数中的Optional
类型提示后的第二个警告将不再发出是的,门楣是对的。一个类型必须是完全兼容的,否则可能会有潜在的错误,linter正警告您。严格来说,PyCharm在第一种情况下也应该发出警告,因为
str
和int
之间可能存在不兼容让我们使用Mypy static type checker,因为它的结果通常更准确
以下是:
将导致Mypy发出错误:
Python使用gradual typing表示随着代码的进行,可以检查类型,从而逐渐提示正确性
如果显式检查类型:
Mypy静态类型检查器不会发出错误。另一种方法是使用^{} ,如果您确定在调用
funcs(var)
行之前,该值将被限制为None
相关问题 更多 >
编程相关推荐