并行提取请求的异常处理

joh*_*y B 1 tornado

我有以下代码:

  try:
     responses = yield [httpClient.fetch(url) for url in urls]
  except (HTTPError, IOError, ValueError) as e:
     print("caught")
Run Code Online (Sandbox Code Playgroud)

我不能保证给出的网址是有效的.我希望能够使用该例外来验证网址.如何判断哪个URL在捕获的异常中失败?

此外,如果一次提取失败(比如说第一次),它看起来就像是其他提取中断了吗?有办法防止这种情况吗?或者是否有更好的方法来检查在实际获取之前可以获取URL?对此有更好的模式吗?基本上我想并行获取所有URL并知道哪一个可能失败.

Ben*_*ell 5

最简单的解决方案是传递raise_error=Falsefetch().这将始终给您回复,您将能够检查response.error或使用response.rethrow():

responses = yield [httpClient.fetch(url, raise_error=False) for url in urls]
for url, resp in zip(urls, responses):
    try:
        resp.rethrow()
        print("succeeded")
    except (HTTPError, IOError, ValueError) as e:
        print("caught")
Run Code Online (Sandbox Code Playgroud)