这个Python(2.7)代码中的错误是什么?

时间:2015-11-09 04:23:50

标签: python python-2.7

我正在编写代码以获取任何类型的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'。

1 个答案:

答案 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代码并将其视为特殊情况,即不是错误。