我注意到 Python 3.5 和 Python 3.6 添加了很多关于静态类型检查的功能,所以我尝试使用以下代码(在 python 3.6 中,稳定版本)。
from typing import List
a: List[str] = []
a.append('a')
a.append(1)
print(a)
令我惊讶的是,Python 没有给我错误或警告,尽管 1
附加到 list
应该只包含字符串。 Pycharm
检测到类型错误并给了我一个关于它的警告,但它并不明显并且没有显示在输出控制台中,我担心有时我可能会错过它。我想要以下效果:
- 如果很明显我使用了如上所示的错误类型,则抛出警告或错误。
- 如果编译器不能可靠地检查我使用的类型是对还是错,请忽略它。
那可能吗?也许 mypy
可以做到,但我更愿意使用 Python-3.6 风格的类型检查(如 a: List[str]
)而不是评论风格(如 # type List[str]
) 用于 mypy
。而且我很好奇原生的python 3.6有没有switch来实现我上面说的两点。
原文由 Searene 发布,翻译遵循 CC BY-SA 4.0 许可协议
Python 不可能为你做这件事;您 可以 使用
mypy
进行类型检查(PyCharms 内置检查器也应该这样做)。除此之外,mypy
也不限制 您只能输入注释# type List[str]
,您可以像在 Python 3.6 中那样使用变量注释,因此a: List[str]
有效同样好。With
mypy
as is, because the release is fresh, you’ll need to installtyped_ast
and executemypy
with--fast-parser
and--python-version 3.6
如 mypy 文档中所述。这可能很快就会改变,但现在你需要他们让它顺利运行更新:
--fast-parser
和--python-version 3.6
现在不需要了。执行此操作后,mypy 会检测到您的
a: List[str]
上的第二个操作不兼容。假设您的文件名为tp_check.py
包含以下语句:使用上述参数运行
mypy
(您必须首先pip install -U typed_ast
):捕获错误:
正如 在使用 Python 进行类型提示的许多其他答案中 所述,
mypy
和PyCharm
执行验证的是类型检查器, _而不是 Python 本身_。 Python 目前不使用此信息,它仅将其存储为元数据并在执行期间忽略它。