本地修补缺少Python类型注释?

时间:2017-09-08 10:12:30

标签: python static-typing mypy typeshed

Python现在支持类型提示,所以......耶!这似乎是避免一些比较模糊的运行时错误的好方法。

可悲的是,第三方图书馆支持仍然存在问题。虽然部分由typeshed项目解决,mypy项目也被{{3}}使用,但在尝试移植我的一些代码以使用类型提示时,由于缺少存根而遇到了问题。

E.g。

# file:mypytest.py
import lxml.etree as et
tree = et.fromstring('<root><a>1</a><b>2</b><a>3</a></root>')
items = tree.xpath('/root/a')
print([i.text for i in items])

将完美地运行,但mypy将产生虚假错误消息

>>> mypy mypytest.py
mypytest.py:3: error: "_Element" has no attribute "xpath"

因为存根当前不完整。

对于一个更大的项目,从typeshed下载存根,添加缺少的条目,甚至提交相应的pull请求都是明智之举。

但是有一些方法可以在快速和肮脏的场景中修补丢失的信息吗?

糟糕的解决方法

我能想到的最好的是

items = tree.xpath('/root/a') # type: ignore

会使错误无效,但也会禁用类型检查,之后会使用变量items。例如。 items[0] + 1不会再发出警告。

为了保留类型检查,可以使用

items_tmp = tree.xpath('/root/a') # type: ignore
items = items_tmp # type: List[et._Element]

但这似乎是黑客;它还必须在使用.xpath方法的任何地方重复。

2017-09-12更新:或者可以使用语法

items_tmp : List[et._Element] = tree.xpath('/root/a') # type: ignore

0 个答案:

没有答案