python asyncio 异常处理_Python中的异步异常处理

我有以下代码使用asyncio和aiohttp来进行异步HTTP请求。

import sys

import asyncio

import aiohttp

@asyncio.coroutine

def get(url):

try:

print('GET %s' % url)

resp = yield from aiohttp.request('GET', url)

except Exception as e:

raise Exception("%s has error '%s'" % (url, e))

else:

if resp.status >= 400:

raise Exception("%s has error '%s: %s'" % (url, resp.status, resp.reason))

return (yield from resp.text())

@asyncio.coroutine

def fill_data(run):

url = 'http://www.google.com/%s' % run['name']

run['data'] = yield from get(url)

def get_runs():

runs = [ {'name': 'one'}, {'name': 'two'} ]

loop = asyncio.get_event_loop()

task = asyncio.wait([fill_data(r) for r in runs])

loop.run_until_complete(task)

return runs

try:

get_runs()

except Exception as e:

print(repr(e))

sys.exit(1)

由于某些原因,get函数中引发的异常没有被捕获:

Future/Task exception was never retrieved

Traceback (most recent call last):

File "site-packages/asyncio/tasks.py", line 236, in _step

result = coro.send(value)

File "mwe.py", line 25, in fill_data

run['data'] = yield from get(url)

File "mwe.py", line 17, in get

raise Exception("%s has error '%s: %s'" % (url, resp.status, resp.reason))

Exception: http://www.google.com/two has error '404: Not Found'

那么,什么是正确的方式来处理由couroutines提出的异常?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值