Python 2.7.6,KeyError:尝试运行脚本时的“数据”

时间:2014-05-31 19:04:58

标签: python facebook github keyerror

首先,我是python的全新人物。我是一名平面设计师,我需要获得团体成员照片以获得团体徽标。我发现了这个: https://github.com/lionaneesh/IIITD-Students-Collage 它几乎应该做我需要的东西,但显然我做错了什么并且它没有按预期工作。

执行此脚本时:

import json
from urllib2 import urlopen


fp = open("test2.txt")
data = json.loads(fp.read())
fp.close()

user_photos = {} # id -> [User's Name, Photo URL]

for user in data["data"]:
    print user
    page = urlopen("http://graph.facebook.com/" + user["id"] + "?fields=picture")
    page_data = json.loads(page.read())
    photo_url = page_data["picture"]["data"]["url"]
    user_photos[user["id"]] = [user["name"], photo_url]

fp = open("user_photos.json", "w")
fp.write(json.dumps(user_photos))

我收到此错误:

Traceback (most recent call last):
 File "C:\test.py", line 11, in <module>
    for user in data["data"]:
KeyError: 'data'
>>> 

有人可以向我解释如何解决问题或在哪里寻求帮助吗?

编辑:这是text2.txt中数据的外观:

{
  "id": "1390694364479028", 
  "members": {
    "data": [
      {
        "name": "Patryk Wiśniewski", 
        "administrator": false, 
        "id": "321297624692717"
      }, 
      {
        "name": "Backed PL", 
        "administrator": false, 
        "id": "1440205746235525"
      }, 

等等,与其他小组成员的信息

3 个答案:

答案 0 :(得分:1)

KeyError表示dict对象中没有这样的键。因此,这意味着根据您的脚本,您的文件不包含这样的JSON数据结构。

{"data": {"id": 10000}, {"id": 20000}, {"id": 30000}}

如果您发布了test2.txt的内容或print(data)的输出,那将会有所帮助。

编辑:根据你的text2.txt文件,你的程序流程应该是这样的

for user in data["members"]["data"]:
    print user
    page = urlopen("http://graph.facebook.com/" + user["id"] + "?fields=picture")
    page_data = json.loads(page.read())
    photo_url = page_data["picture"]["data"]["url"]
    user_photos[user["id"]] = [user["name"], photo_url]

您只需将data["data"]更改为data["members"]["data"]即可使您的脚本正常运行。

答案 1 :(得分:0)

你可能在test2.txt

中没有“data”的JSON字段

答案 2 :(得分:0)

查看文档,您应该在txt文件中具有与以下内容完全相同的结构。详细信息。

{
  "data": [
    {
      "name": "Arushi Jain", 
      "administrator": false, 
      "id": "100000582289046"
    }, 
    {
      "name": "Ajay Yadav", 
      "administrator": false, 
      "id": "100004213058283"
    }, 
    and so on ........

  ], 
  "paging": {
    "next": "https://graph.facebook.com/114462201948585/members?limit=5000&offset=5000&__after_id=712305377"
  }
}

{

 {
  "data": [                    # how yours should look
   {
        "name": "Patryk Wiśniewski",
        "administrator": false,
        "id": "321297624692717"
      },
      {
        "name": "Patryk Kurowski",
        "administrator": false,
        "id": "1429534777317507"
      },
      {
        "name": "Jan Konieczny",
        "administrator": false,
        "id": "852450774783365"
      }

  ], 
  "paging": {
    "next": "https://graph.facebook.com/114462201948585/members?limit=5000&offset=5000&__after_id=712305377"
  }
}

这是在循环中执行的第一件事,所以如果它不完全匹配则会失败,就像它在错误中一样。