如何在python 3.6中使用类型提示?

Searene:

我注意到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可以检测到类型错误并向我发出警告,但是它并不明显,并且未在输出控制台中显示,我担心有时可能会错过它。我想要以下效果:

  1. 如果很明显如上所述我使用了错误的类型,请抛出警告或错误。
  2. 如果编译器无法可靠地检查我使用的类型是对还是错,请忽略它。

那可能吗?也许mypy可以做到,但我宁愿使用python-3.6样式类型检查(如a: List[str]),而不是中使用的注释样式(如# type List[str]mypy我很好奇,是否在本机python 3.6中有一个开关可以实现我在上面提到的两点。

Dimitris Fasarakis Hilliard:

那可能吗?也许mypy可以做到,但是我更喜欢使用Python-3.6样式类型检查(如a: List[str]),而不是# type List[str]mypy中使用的注释样式(如)。我很好奇,是否在本机python 3.6中有一个开关可以实现我在上面提到的两点。

Python不可能为您做到这一点;可以使用它mypy来进行类型检查(PyCharms内置检查器也应该这样做)。除此之外,mypy不仅限于键入注释# type List[str],还可以像在Python 3.6中那样使用变量注释,因此a: List[str]效果同样好。

随着mypy作为是,因为释放是新鲜的,你需要安装typed_ast和执行mypy--fast-parser--python-version 3.6 为记录在mypy的文档这可能会很快改变,但是现在您需要他们来使其平稳运行

更新: --fast-parser并且--python-version 3.6现在不需要。

完成此操作后,mypy就可以很好地检测到第二个操作的不兼容性a: List[str]假设您的文件tp_check.py使用以下语句调用

from typing import List

a: List[str] = []
a.append('a')
a.append(1)
print(a)

mypy使用上述参数运行(必须首先运行pip install -U typed_ast):

python -m mypy --fast-parser --python-version 3.6 tp_check.py

捕获错误:

tp_check.py:5: error: Argument 1 to "append" of "list" has incompatible type "int"; expected "str"

如前所述在类型与Python暗示许多其他的答案mypyPyCharmS'型,跳棋是进行验证,那些不Python本身Python当前不使用此信息,它仅将其存储为元数据,并且在执行期间将其忽略。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章