2012-12-01 59 views
0

print user_dic[id]顯示正確的結果PersonA。這是我手動輸入ID的時候。如何修復django中的KeyError?

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通過一個for循環,通過JSON迭代我得到一個錯誤: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]) 
+0

可能是'actor_id'不一樣'user_id'?嘗試打印'user_dic'然後'actor_id'並手動檢查是否存在 –

+0

當我將print user_id打印出來時,我得到了17800013這是我在代碼的第一部分手動輸入的內容。你在問什麼? – sharataka

+0

檢查我的答案我已更新 –

回答

0

不需要user_dic。你在第一部分所做的只是一項多餘的工作,你也做錯了。你的user_stream已經以你想要的形式出現了。你的第一部分應該包含這一行:

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

而在第二部分(在您所面臨的問題行),你應該做的:

name = user_stream[user_id] 

如果你認爲你將面臨KeyError然後dict有方法.get,如果未找到密鑰,則返回None。你可以指定你的價值,而不是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 
+0

當我使用name = user_stream [user_id]時,我得到IndexError:列表索引超出範圍。我在這行之前打印了user_id,它打印出user_id ...我已經確認這個user_id在user_stream中也存在。 – sharataka

+0

據我所知,看你的代碼'user_stream'是'dict'而不是'list'。 IndexError是用於列表的。可能是你正在覆蓋'user_stream'變量的一些地方。請分享您的完整代碼鏈接,使用pastebin。 –

+0

http://dpaste.de/9JKfn/ – sharataka

相關問題