我在用 aiohttp 写一个异步爬虫,在写注解时遇到的问题。
async def fetch(session: aiohttp.ClientSession, url: str, params: dict = {}, proxy: str = SOCKS) -> Tuple[int, Coroutine[str|None]]:
"""
爬取函数
"""
async with semaphore:
try:
logging.info(f'正在爬取:{url}')
async with session.get(url, headers=HEADER, proxy=proxy, params=params) as response:
return response.status, await response.text()
except aiohttp.ClientError:
logging.error('爬取错误: %s',
url, exc_info=True)
我想给 Coroutine 指定 await 返回值的类型,但报错了。
TypeError: Too few arguments for typing.Coroutine; actual 1, expected 3
他需要3个参数,但我只给了1个。
这是官方的文档,没看太懂。后来在 stackoverflow 上找到了答案。
- 第一个参数是用
send
方法后,返回值的类型。 - 第二个参数是用
send
方法传递值的类型。 - 第三个参数是
await
返回值的类型。