【发布时间】:2020-01-17 15:59:49
【问题描述】:
考虑以下使用asyncio/async/await的基本脚本:
import asyncio
from typing import List
async def foo(x) -> int:
await asyncio.sleep(x / 2)
return x
async def main() -> List[int]:
return await asyncio.gather(*(foo(i) for i in (1, 2, 3)))
if __name__ == "__main__":
print(asyncio.run(main()))
这个运行查找,打印[1, 2, 3]; await asyncio.gather() 产生一个List[int]。
然而,mypy 不喜欢这个文件;它提出:
mypytest.py:9: 错误:
赋值中不兼容的类型(表达式的类型为“Tuple[Any, ...]”,变量的类型为“List[int]”)
我假设这是因为 asyncio.gather() annotations 在排版中。
但是,从用户的角度来看,这仍然有点令人困惑。 我可以在这里做些什么不同的事情来让 mypy 开心?为什么会存在这种歧义?
对于它的价值,mypy 文档的 Typing async/await 部分对此没有太多说明。
【问题讨论】:
-
看起来像类型注释中的一个错误,尽管可能是故意使多个返回值看起来正常(因此您可以分解返回值)- List 不支持这样的类型参数。可能值得在 typeshed 上提出问题
标签: python python-3.x mypy python-typing