连接到API时的KeyError

时间:2015-12-12 19:28:50

标签: python json django api

我试图将我的Django应用程序与我的队友制作的API连接起来。我编写了一个脚本来构建字符串然后发出请求。我想将结果返回到视图,以便我可以在网页上显示它们。我通过从终端调用脚本来调试脚本,但是一旦它工作,我将从我的视图文件中调用run_query方法。我执行脚本的终端返回此错误,但是:

Traceback (most recent call last):
  File "website/api.py", line 45, in <module>
    run_query("Statistics", 42)
  File "website/api.py", line 32, in run_query
    for result in json_response[0]['results']:
KeyError: 0

我已经替换了一些值,因为数据不是公开的。

这是API返回的内容:

{"Statistics":[{"DateTime":"2015-03-10T06:20:39Z","Percentage":33},{"DateTime":"2015-03-10T06:21:39Z","Percentage":23},(Hundred more records){"DateTime":"2015-03-19T21:15:35Z","Percentage":9}],"AverageStatistics":11}

这是Python脚本。

import json
import requests

def run_query(type, id):
    # Base URL
    root_url = "https://api.com/"

    if type == "Statistics":
        data_type = "Statistics"
    else:
        print("Error: Invalid type input.")

    request_url = root_url + data_type + "?Id=" + str(id)
    print request_url

    results = []

    try:
        # Connect
        response = requests.get(request_url)
        print response

        # Convert response to dictionary object
        json_response = response.json()
        print json_response

        # Loop through results
        if type == "Statistics":
            for result in json_response[0]['results']:
                results.append({
                'DateTime': result['DateTime'],
                'Percentage': result['Percentage']})

    # Catch URLError exception
    except requests.exceptions.RequestException, e:
        print "Error querying API: ", e

    return results

if __name__ == '__main__':
    print "Connecting with API..."
    run_query("Statistics", 42)

for result in json_response[0]['results']:会引发错误。我已经读过响应应该是一个列表对象,因此密钥应该为0,对吗?我尝试使用&#34;统计&#34;作为一个关键,然后Python告诉我,我应该输入一个整数。

print json_response打印出来:

{u'AverageStatistics': 11.739414713896636, u'Statistics': [{u'Percentage': 33.23, u'DateTime': u'2015-03-10T06:20:39Z'},

然后记录更多。

2 个答案:

答案 0 :(得分:1)

您的json_response词典没有以0为键的条目。根据代码的其余部分,您应该使用for result in json_response['Statistics']代替for result in json_response[0]['results']

答案 1 :(得分:1)

字典中的json_response,没有键作为&#39; 0&#39;。这就是你得到KeyError的原因。

而是使用json_response [&#39; AverageStatistics&#39;]和json_response [&#39; Statistics&#39;]