【问题标题】:requests.HTTPError uncaught after a requests.get() 404 responserequests.get() 404 响应后未捕获 requests.HTTPError
【发布时间】:2013-04-18 20:02:04
【问题描述】:

我的请求库有点问题。

例如,我在 Python 中有这样的语句:

try:
   request = requests.get('google.com/admin') #Should return 404

except requests.HTTPError, e:
   print 'HTTP ERROR %s occured' % e.code

由于某种原因,异常没有被捕获。我已经检查了请求的 API 文档,但它有点苗条。有没有人对图书馆有更多经验可以帮助我?

【问题讨论】:

  • 第一件事:当试图捕捉不熟悉的异常时,“提升”它们并尝试捕捉它们并观察是否/如何可能。

标签: python error-handling try-catch python-requests


【解决方案1】:

翻译是你的朋友:

import requests
requests.get('google.com/admin')
# MissingSchema: Invalid URL u'google.com/admin': No schema supplied

另外,requests 例外:

import requests.exceptions
dir(requests.exceptions)

另请注意,如果状态不是 200,默认情况下 requests 不会引发异常:

In [9]: requests.get('https://google.com/admin')
Out[9]: <Response [503]>

raise_for_status() 方法可以做到这一点:

In [10]: resp = requests.get('https://google.com/admin')

In [11]: resp
Out[11]: <Response [503]>

In [12]: resp.raise_for_status()
  ...
HTTPError: 503 Server Error: Service Unavailable

【讨论】:

  • 你知道我可以访问的网站会返回一个模式并强制 HTTP 错误处理程序吗?谢谢你,你的回答很有帮助。从现在开始,我一定会使用解释器。
  • 我不太清楚你的意思。 URI scheme 是指定协议(http、https、ftp 等)的部分。所以错误说google.com/admin中没有scheme,应该是https://google.com/admin。您可以覆盖 requests 方法并自己检查缺少的方案,如果缺少,则添加“http://”,但这不是一个好主意。
  • 好吧,我想我的问题是,即使我更改代码以反映 https://google.com/admin,仅作为示例请注意,它仍然会返回一些随机 http 响应.我只是好奇为什么当我调用 requests.get('https://google.com/admin') 时没有任何响应被捕获。肯定会发生某种http错误响应并且没有被捕获=/
  • 谢谢您的回复。 =)
【解决方案2】:

在 python 2.7.5 中运行您的代码:

import requests

try:
  response = requests.get('google.com/admin') #Should return 404
except requests.HTTPError, e:
  print 'HTTP ERROR %s occured' % e.code
  print e

结果:

File "C:\Python27\lib\site-packages\requests\models.py", line 291, in prepare_url raise MissingSchema("Invalid URL %r: No schema supplied" % url) requests.exceptions.MissingSchema: Invalid URL u'google.com/admin': No schema supplied

要让您的代码获取此异常,您需要添加:

  except (requests.exceptions.MissingSchema) as e:
    print 'Missing schema occured. status'
    print e

还请注意,它不是缺少架构,而是缺少方案。

【讨论】:

    猜你喜欢
    • 2016-06-01
    • 1970-01-01
    • 2014-08-13
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多