Asyncio异常处理,可能无法收集异常?

时间:2018-08-08 12:36:21

标签: python list web-scraping exception-handling python-asyncio

我有一些代码,可以使用asyncioaiohttp进行一些API调用。对于某些URL,asyncio将引发异常,因此我允许它返回它(使用asyncio.gather(return_exceptions = True)),因此它不会中断事件循环。是否可能不收集返回的异常,所以它仅返回有效的结果?还是之后需要手动清理列表?

这是代码:

import asyncio
import aiohttp
import ssl
import datetime as dt

limit = 30
start_epoch = int(dt.datetime(2018,7,1).timestamp())
end_epoch = int(dt.datetime.now().timestamp())
epoch_step = 40000
url_list = []
while True:
    url = "https://api.pushshift.io/reddit/search/comment/?q=" + "Nestle" + "&size=" + str(limit) + "&after=" + str(start_epoch) + "&before=" + str(start_epoch + epoch_step)
    url_list.append(url)
    start_epoch += epoch_step
    if start_epoch > end_epoch:
        break

async def fetch(session, url):
    async with session.get(url, ssl=ssl.SSLContext()) as response:
        return await response.json()


async def fetch_all(urls, loop):
    async with aiohttp.ClientSession(loop=loop) as session:
        results = await asyncio.gather(*[fetch(session, url) for url in urls], return_exceptions=True)
        return results


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    urls = url_list
    htmls = loop.run_until_complete(fetch_all(urls, loop))
    print(htmls)

,它返回一个看起来像这样的列表:

[ContentTypeError("0, message='Attempt to decode JSON with unexpected mimetype: text/html'",), {'data': [{'author':...]

0 个答案:

没有答案