2016-08-28 4 views
-1

다음 간단한 코드 단편을 사용하여 JSON 객체를 가져온 다음 특정 필드를 목록으로 가져옵니다. 여기있다 :Python json key error

#Set Observations URL request for all observations within the Osa Pennisula, Costa Rica 
query = urllib2.urlopen("http://api.inaturalist.org/v1/observations?nelat=8.60586&nelng=-83.44410&swlat=8.43066&swlng=-83.74073&per_page=1000&order=desc&order_by=created_at") 
obSet = json.load(query) 

#Find all common names for observations 


for item in obSet['results']: 
    print item['taxon']['preferred_common_name'] 

URL은 iNaturalist node.js 서비스에 대한 호출입니다. - 내가 응답 (304 개) 결과를 가지고 있다는 것을 알고 있지만, 코드가 몇 가지를 인쇄 한 후 날려 버릴 것 같다

Red Brocket 
Gumbo Limbo 
Northern Tamandua 
Colubrids 
Bats 
Skippers 
True Toads 
Crested Owl 
Tropical Screech-Owl 
White-nosed Coati 
Central American Squirrel Monkey 
Thread-legged Bugs 
Roadside Hawk 
Barn Owl 
Red Land Crab 
Crested Caracar 

--------------------------------------------------------------------------- 
KeyError         Traceback (most recent call last) 
<ipython-input-255-6e709d365b1b> in <module>() 
    3 
    4 for item in obSet['results']: 
    ----> 5  print item['taxon']['preferred_common_name'] 
    6 
    7 

KeyError: 'preferred_common_name' 

은 그래서 이상한 : 나는 전화를 걸 때 나는 다음과 같은 결과를 얻을. 왜 이런거야?!

답변

2

obSet['results']의 모든 항목에 item['taxon']['preferred_common_name'] 키가 없기 때문에

당신은이 KeyError을 잡아 공격적인 키를 인쇄함으로써이를 막을 수 있습니다. 일부 항목 'taxon' 키 값으로 None을 가지고있는 것처럼 또한 보인다, 그래서 당신은뿐만 아니라이를 잡으려고 할 수 있습니다 :

for item in obSet['results']: 
    try: 
      print item['taxon']['preferred_common_name'] 
    except (KeyError, TypeError): 
      print item 
+0

확인 -이이 문제를 해결로 전술 질문에 편집 한 내용을 추가했습니다! –

+0

@AnthonyW 업데이트 된 답변보기. 두 가지 문제점을 모두 해결합니다. – DeepSpace

+0

예. 감사! –