3

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

可悲的是,第三方库支持仍然是一个问题。虽然 mypy 也使用了 typeshed 项目部分解决了这个问题尝试移植我的一些代码以使用类型提示时,由于缺少存根,我遇到了问题。

例如

# 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 下载存根,添加缺失的条目,甚至提交相应的拉取请求是一件轻而易举的事。

但是有什么方法可以在快速而肮脏的场景中修补缺失的信息吗?

糟糕的解决方法

我能想到的最好的是

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
4

0 回答 0