Python 如何修复django中的键错误?

Python 如何修复django中的键错误?,python,django,view,dictionary,Python,Django,View,Dictionary,print user\u 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 valu

print user\u 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
然而,当我尝试将
用户id
放入一个遍历json的for循环时,我得到一个错误:
在17800013处的keyrerror,该行
name=user\u dic[user\u id]
。我不明白为什么手动输入id时,
user\u dic[id]
会起作用,但是当通过for循环时,
user\u dic[user\u id]
即使输入相同也不起作用

#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])

无需
user_udic
。你们在第一部分所做的只是一个多余的工作,你们也做错了。您的
用户\u流
已经以您想要的形式存在。第一部分应包含以下行:

user_stream = {u'2331449': u'PersonB', u'17800013': u'PersonA'}
在第二部分(在你们面临问题的那一行),你们应该做:

name = user_stream[user_id]
如果您认为您将面临
KeyError
,那么
dict
有一个方法
.get
,如果找不到密钥,该方法将返回
None
。如果存在
KeyError

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

可能是
参与者id
用户id
不同?尝试打印
user\u dic
,然后打印
actor\u id
并手动检查它是否存在当我输入打印user\u id时,我得到17800013,这是我在代码的第一部分手动输入的内容。这就是你要问的吗?检查我的答案我已经更新了当我使用name=user\u stream[user\u id]时,我发现indexer:list index超出了范围。我在这行前面有打印用户id,它打印用户id…我已经确认该用户id也存在于用户流中。据我所知,查看您的代码
user\u流
是一个
dict
而不是
列表
索引器
用于
列表
。可能是您在某些地方覆盖了
用户流
变量。请共享完整代码的链接,使用pastebin。在这一行之后打印
user\u stream
的值
user\u stream=json。loads(u.read().decode(“utf-8”)[“data”]
。它返回朋友的json:[{'name':'Samir Rao','id':'13596},{'name':'Tom Wionzek','id':'15226'}只是一个片段。让我们来看看