首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嗅探Pythonurllib2.httperror内容并将其传递给

嗅探Pythonurllib2.httperror内容并将其传递给
EN

Stack Overflow用户
提问于 2015-02-23 14:14:11
回答 1查看 183关注 0票数 1

在某些python代码中,我使用一个库将请求包装到web服务。我打算使用的行为是,任何HTTPErrors的内容输出都带有logging.error和状态代码,并且错误会传递:

代码语言:javascript
复制
def my_request_thing(api, other_stuff):
  request = make_request_from(api, other_stuff)
  try:
    with closing(urllib2.urlopen(request)) as fd:
      return fd.read()
  except HTTPError as e:
    logging.error("Error from server: %s\n%s", e.code, e.read())
    raise

这段代码将记录并传递错误,但有一个问题是,e.read中的异常内容已经耗尽。此代码用于API的大多数客户端,以替代诸如根路径和http头之类的东西.然后,我可能会有另一个功能,用于更多特定于领域的内容,使用如下:

代码语言:javascript
复制
function get_my_thing(thing_id, conditions):
  try:
    return json.loads(my_request_thing(<thing_id + conditions into api and stuff...>))
  except HTTPError as e:
    if e.code == 404 and "my thing does not exist" in e.read():
      return False
    else:
      raise e

请注意,这还会尝试使用e.read获取数据--该数据现在是空的,并且可能仍然会重新定位错误。这将失败--这里没有e.read中的数据。

是否有一种很好的方法来重新定义这个异常,这样内容就不会耗尽,但是这样我就可以嗅探出特定的异常类型,并将它们全部记录下来吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-27 23:18:41

根据Karel Kubat的注释,为什么不将来自e.read()的结果第一次作为数据成员注入到异常中呢?

例如,使用空的HTTPError从self.content派生您自己的错误类。当第一次捕获异常时,从self.read().填充self.read().下一个处理程序可以检查e.content

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28675751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档