我正在编写代码以获取任何类型的URL的服务代码
import requests
req = requests.get("http://www.google.com", allow_redirects = False)
code_from_url = req.status_code
print type(code_from_url)
codes = { 200:'Success', 301:'Moved Permanently', 400: 'Bad Request', 401:'Unauthorized', 403:'Forbidden', 404:'Not Found', 500:'Internal Server Error', 502:'Bad Gateway' }
print code_from_url
print codes[code_from_url]
但是,当我运行此代码时,我在第7行收到错误,即print codes[code_from_url]
声明'KeyError:302'。
答案 0 :(得分:1)
由于您的查找集合(稍微重新格式化):
codes = {
200: 'Success',
301: 'Moved Permanently',
400: 'Bad Request',
401: 'Unauthorized',
403: 'Forbidden',
404: 'Not Found',
500: 'Internal Server Error',
502: 'Bad Gateway'
}
实际上 没有302
的键, 你得到KeyError
例外。
代码302 Found
旨在向客户端指示需要重定向,同时为所述客户端提供更新其自己对资源的引用的能力。所以(至少)有三种方法可以解决这个问题。
第一个选项,如果您实际上并不关心自己被重定向(并且您可能不是http://www.google.com
,那么这将是我的首选选项),您可以简单地让重定向发生而不通知:
req = requests.get("http://www.google.com", allow_redirects = True)
其次,您可以将302
视为错误,方法是将其添加到您的回复集合中:
codes = { 200:'Success', 301:'Moved Permanently', 302:'Found', ...
第三,您可以检查此302
代码并将其视为特殊情况,即不是错误。