微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mypy无法正确推断生成器理解的类型

如何解决mypy无法正确推断生成器理解的类型

我正在使用 data-science-types 提供的存根文件,以使mypy能够检查与熊猫相关的代码。可悲的是,我得到以下行为:

对于

import pandas as pd

def test() -> pd.DataFrame:
    pass

pd.concat((test() for _ in range(10)))

mypy报告 test.py:6: error: Argument 1 to "concat" has incompatible type "Generator[DataFrame,None,None]"; expected "Union[Sequence[DataFrame],Mapping[str,DataFrame]]". 如果我使用pd.concat([test() for _ in range(10)]),则mypy再次感到高兴。有人可以向我解释那里发生了什么吗?

以防万一。我正在使用python3.8.5,pandas 1.1.2,mypy 0.782和data-science-types 0.2.18。

解决方法

您正在将生成器与序列混淆。序列为by definition

一个迭代器,它支持通过__getitem__()特殊方法使用整数索引进行有效的元素访问,并定义了一个__len__()方法,该方法返回序列的长度。

生成器既不支持,也不是一种映射,因此您不能将其传递给pd.concat

,

首先,由于代码中的生成器表达式的SendType和ReturnType为None,因此Screens是正确的类型,请参见docs。因此, chepner 指出问题出在预期类型上。即使WindowManager除了生成器 data-science-types 之外,都没有它作为输入类型的可能。我本来以为是个错误,但是在他们的github page data-science-types 上写

哲学:[...]通常,库中的实际API比存根中的类型签名更宽松;但这通常是一项功能,而不是错误。

我认为问题已经解决。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。