PyCharm 类型检查无法按预期工作
Posted
技术标签:
【中文标题】PyCharm 类型检查无法按预期工作【英文标题】:PyCharm type checking doesn't work as expected 【发布时间】:2018-09-23 15:32:42 【问题描述】:编辑
根据@Jim Fasarakis Hilliard 的回答,我知道这不是错误,而是预期的行为。所以,我想补充一个问题——我可以在PyCharm
的类型检查器中以某种方式强制mypy
s --strict-optional
类似功能吗?
看了几个关于Python 3.5+
和Pycharm
类型检查的视频后,我认为这应该被标记为错误的返回类型:
from typing import Optional, List
import random
def r() -> Optional[List[int]]:
if random.choice([0, 1]):
return [1, 2, 3]
return None
def f() -> List[int]:
return r()
f()
函数可以返回 list
或 int
s 或 None
,这是明确指定的,但 PyCharm
不会将 return r()
标记为错误返回。
def f() -> List[int]:
return None
例如,如果f()
函数如上所示,PyCharm
检测到有错误的return
类型。
这是一个错误还是我应该更改一些设置?我将类型检查的严重性提高到error
。
【问题讨论】:
【参考方案1】:PyCharm 的类型检查器可能对None
的处理方式与mypy
相同,请参阅:The type of None and optional types(至少在这种情况下是这样做的。)
这与以下函数类型同时检查 mypy (0.580) 和 PyCharm (build 173.4301.16) 的原因相同:
def foo(x: Optional[int]) -> int:
return x + 2
我猜可以称之为错误吗?无论哪种方式,mypy
都提供了 --strict-optional
标志来处理这些问题,并且在使用时会捕获您的原始错误:
error: Incompatible return value type (got "Optional[List[int]]", expected "List[int]")
根据 mypy 的文档,该标志将在未来的版本中默认使用。尽管我在他们的documentation on Type Hints 中找不到任何相关信息,但我可以放心地假设 PyCharm 会在某个时候效仿。
【讨论】:
谢谢,所以 PyCharm 中还没有这样的选项吗?这对我来说比 mypy 舒服多了。 @MilanoSlesarik 我明白了。不幸的是,我似乎找不到有关 PyCharm 类型检查器的文档,所以我不确定它可能暴露的任何特殊标志。 这个问题在 PyCharm 的 PY-24834 下跟踪以上是关于PyCharm 类型检查无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
函数 .contains() 在 Groovy 中无法按预期方式工作
带有操作块的 NSOperationQueue 在 SWIFT 中无法按预期工作