Mil*_*ano 3 python typing pycharm python-3.x python-3.5
编辑
根据@Jim Fasarakis Hilliard的回答,我知道这不是错误,而是预期的行为。因此,我想补充一个问题-我可以在类型检查器中以某种方式强制使用类似mypys --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()
Run Code Online (Sandbox Code Playgroud)
该f()函数可以返回list的intS或None它明确地规定,但PyCharm并不标志着return r()作为一个错误的返回。
def f() -> List[int]:
return None
Run Code Online (Sandbox Code Playgroud)
例如,如果f()函数如上所示,则PyCharm检测到错误的return类型。
是一个错误还是我应该更改某些设置?我将类型检查的严重性提高到error。
PyCharm的类型检查器可能None以相同的方式处理mypy,请参见:None类型和可选类型(至少在这种情况下是这样做的。)
与以下函数类型同时检查mypy(0.580)和PyCharm(内部版本173.4301.16)的原因相同:
def foo(x: Optional[int]) -> int:
return x + 2
Run Code Online (Sandbox Code Playgroud)
我猜有人可以称它为错误吗?无论哪种方式,都mypy提供--strict-optional标志来处理这些错误,并且在使用时,将捕获您的原始错误:
error: Incompatible return value type (got "Optional[List[int]]", expected "List[int]")
Run Code Online (Sandbox Code Playgroud)
根据mypy的文档,此标记将在未来的版本中默认使用。我可以肯定地认为PyCharm会在某个时候效仿,尽管我在他们有关类型提示的文档中找不到任何相关信息。