PyCharm类型检查不能按预期工作

时间:2018-04-13 09:55:25

标签: python python-3.x pycharm python-3.5 typing

修改

根据@Jim Fasarakis Hilliard的回答,我知道这不是一个错误,这是预期的行为。所以,我想添加一个问题 - 我可以以某种方式强制mypy --strict-optional - 类似PyCharm类型检查器中的功能吗?

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()

enter image description here

f()函数可以返回明确指定的list intNone,但PyCharm不会标记return r()作为一个错误的回报。

def f() -> List[int]:
    return None

enter image description here

例如,如果f()函数如上所示,PyCharm会检测到return类型错误。

这是一个错误还是我应该更改一些设置?我将类型检查的严重性提高到error

1 个答案:

答案 0 :(得分:4)

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

可以称之为bug吗?无论哪种方式,mypy都会提供--strict-optional标记来处理这些问题,并在使用时捕获原始错误:

error: Incompatible return value type (got "Optional[List[int]]", expected "List[int]")

根据mypy的文档,默认情况下将在未来的版本中使用此标志。我会安全地假设PyCharm会在某些时候效仿,但我在documentation on Type Hints中找不到任何相关信息。