2012-12-01 14 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 

, 내가 JSON을 반복 내가 오류를 얻을 for 루프를 통해 user_id을 넣어보십시오 KeyError at 17800013 라인 name = user_dic[user_id]합니다. 나는 왜 수동으로 ID를 입력 할 때 user_dic[id]이 작동하는지 이해하지 못하지만, 입력이 같더라도 for 루프를 통과 할 때는 user_dic[user_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]) 
+0

는'actor_id'가'user_id'과 동일하지 않습니다 수 있음이 경우 반환하는 대신 None 당신의 값을 지정할 수 있습니다? 'user_dic' 그리고 나서'actor_id'를 인쇄 해보고 그것을 수동으로 확인하십시오. –

+0

print_id를 넣으면 17800013이 나옵니다. 이것은 코드의 첫 부분에서 수동으로 입력 한 것입니다. 그게 당신이 묻고 있던거야? – sharataka

+0

내 대답을 확인하십시오. 업데이트했습니다. –

답변

0

user_dic은 필요하지 않습니다. 첫 부분에서 당신이하고있는 일은 단지 중복 된 작업 일 뿐이며 또한 잘못하고 있습니다. user_stream은 이미 원하는 방식으로 제공됩니다. 당신은 당신이 KeyError 다음 dict가있다 직면하게 될 것을 생각하면

name = user_stream[user_id] 

:

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

그리고 두 번째 부분에서

가 (이 문제에 직면하고있다 행에) 당신이해야 : 귀하의 첫 번째 부분은이 라인을 포함해야 .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 
+0

name = user_stream [user_id]을 사용하면 IndexError : 목록 색인이 범위를 벗어납니다. 이 줄 앞에 user_id를 인쇄하면 user_id가 출력됩니다 ...이 user_id가 user_stream에도 존재 함을 확인했습니다. – sharataka

+0

필자의 코드를 보면'user_stream'은'dict'이며'list'가 아닙니다. 'IndexError'는'lists'를위한 것입니다. 'user_stream' 변수를 겹쳐 쓰는 경우도 있습니다. 전체 코드의 링크를 공유하고, pastebin을 사용하십시오. –

+0

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

관련 문제