【问题标题】:How to fix a KeyError in django?如何修复 django 中的 KeyError?
【发布时间】:2012-12-01 18:31:19
【问题描述】:

print user_dic[id] 显示正确的结果PersonA。这是我手动输入 id 的时候。

user_stream = {u'2331449': u'PersonB', u'17800013': u'PersonA'}
user_dic= {}
for item in user_stream:
    user_dic[item['id']] = item['name']

id = '17800013'
print user_dic[id]  #returns the right value

但是,当我尝试将 user_id 放入遍历 json 的 for 循环中时,我得到一个错误:KeyError at 17800013 用于行 name = user_dic[user_id]。我不明白为什么 user_dic[id] 在手动输入 id 时有效,但 user_dic[user_id] 在通过 for 循环时不起作用,即使输入相同。

#right fql query
fql_query = "SELECT created_time, post_id, actor_id, type, updated_time, attachment FROM stream WHERE post_id in (select post_id from stream where ('video') in attachment AND source_id IN ( SELECT uid2 FROM friend WHERE uid1=me()) limit 100)"
fql_var = "https://api.facebook.com/method/fql.query?access_token=" + token['access_token'] + "&query=" + fql_query + "&format=json"
data = urllib.urlopen(fql_var)
fb_stream = json.loads(data.read())

fb_feed = []
for post in fb_stream:
    user_id = post["actor_id"]
    name = user_dic[user_id]  #this is the line giving me trouble
    title = post["attachment"]["name"]
    link = post["attachment"]["href"]
    video_id = link[link.find('v=')+2 : link.find('v=')+13]
    fb_feed.append([user_id, name, title, video_id])

【问题讨论】:

  • 可能actor_iduser_id 不同?尝试打印user_dic 然后actor_id 并手动检查是否存在
  • 当我输入 print user_id 时,我得到 17800013,这是我在代码的第一部分手动输入的。你问的是这个吗?
  • 检查我的答案我已经更新了

标签: python django view dictionary


【解决方案1】:

不需要user_dic。您在第一部分所做的只是一项多余的工作,而且您也做错了。你的user_stream 已经是你想要的形式了。您的第一部分应包含以下行:

user_stream = {u'2331449': u'PersonB', u'17800013': u'PersonA'}

在第二部分(在你遇到问题的地方)你应该这样做:

name = user_stream[user_id]

如果你认为你会遇到KeyError,那么dict 有一个方法.get,如果没有找到Key,它会返回None。如果有KeyError,您可以指定您的值而不是None 来返回

name = user_stream.get('user_id')
#returns None by default
name = user_stream.get('user_id', '')
#returns empty string now
#on both cases exception will not raised

【讨论】:

  • 当我使用 name = user_stream[user_id] 时,我得到 IndexError: list index out of range。我在这一行之前打印了 user_id,它打印了 user_id...我已经确认这个 user_id 确实存在于 user_stream 中。
  • 据我所知,查看您的代码 user_streamdict 而不是 listIndexError 用于 lists。可能是你在某个地方覆盖了user_stream 变量。请分享您的完整代码链接,使用 pastebin。
  • user_stream = json.loads(u.read().decode("utf-8"))["data"]这一行之后打印user_stream的值。
  • 它返回朋友的 json:[{'name': 'Samir Rao', 'id': '13596'}, {'name': 'Tom Wionzek', 'id': ' 15226'}] 只是一个 sn-p。
猜你喜欢
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 2022-12-18
  • 2023-03-18
相关资源
最近更新 更多