【Python】如何给 Coroutine 写注解
2022年 10月 02 日

子弹

我在用 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 返回值的类型。

【Python】如何给 Coroutine 写注解

我在用 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 返回值的类型。

赞 (4)

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论