2013-10-18 2 views
0

이것은 나를 미치게합니다. 저는 파이썬과 AppEngine을 처음 접했고, 이것을 이해하지 못했습니다. App Engine에서 호스팅하는 간단한 앱을 작성 중입니다. 내 문제는 : for 루프를 사용하여 파이썬 사전에 액세스 할 수 있지만 키 문자열을 사용하여 사전의 항목에 직접 액세스 할 수 없습니다.파이썬 사전 키는 응용 프로그램 엔진에서 액세스 할 수 없습니다.

나는 다음과 같은 JSON 문자열을 반환하는 JSON 웹 서비스를 호출하고 있습니다 : 그것은 혼란을 얻는 곳입니다

states=dict() 

url="http://something.com/json" 
try: 
    response=urllib2.urlopen(url) 
    states=json.load(response) 
except Exception as ex: 
    self.response.write("Google says: %s"%(ex.message)) 
    self.response.write("<br>Try refreshing the page again") 
    SystemExit(0) 

:

{"WA": "Washington", "DE": "Delaware", "DC": "District of Columbia", "WI": "Wisconsin", "WV": "West Virginia", "HI": "Hawaii", "FL": "Florida", "WY": "Wyoming", "NH": "New Hampshire", "NJ": "New Jersey", "NM": "New Mexico", "TX": "Texas", "LA": "Louisiana", "NC": "North Carolina", "ND": "North Dakota", "NE": "Nebraska", "TN": "Tennessee", "NY": "New York", "PA": "Pennsylvania", "CA": "California", "NV": "Nevada", "VA": "Virginia", "CO": "Colorado", "AK": "Alaska", "AL": "Alabama", "AR": "Arkansas", "VT": "Vermont", "IL": "Illinois", "GA": "Georgia", "IN": "Indiana", "IA": "Iowa", "MA": "Massachusetts", "AZ": "Arizona", "ID": "Idaho", "CT": "Connecticut", "ME": "Maine", "MD": "Maryland", "OK": "Oklahoma", "OH": "Ohio", "UT": "Utah", "MO": "Missouri", "MN": "Minnesota", "MI": "Michigan", "RI": "Rhode Island", "KS": "Kansas", "MT": "Montana", "MS": "Mississippi", "SC": "South Carolina", "KY": "Kentucky", "OR": "Oregon", "SD": "South Dakota"} 

파이썬 코드는 다음과 같이입니다. 다음 문은 잘 실행됩니다.

그러나 해당 키를 사용하여 사전을 참조해야합니다. 그래서 저는 이것을했습니다 :

self.response.write(states["IN"]) 

이것은 작동하지 않습니다. Google에서 말하는 내용은 다음과 같습니다.

File "/base/data/home/apps/bu3245/1.371010709629673028/test.py", line 42, in get 
self.response.write(states["IN"]) 
KeyError: 'IN' 

내가 뭘 잘못 했습니까? 로컬에서 디버그 할 때 코드는 작동하지만 앱 엔진에있을 때는 작동하지 않습니다. 모든 키와 값이 for 루프에 의해 침을 흘리는 것을 볼 수 있지만 키를 사용하여 사전에 액세스하면 키 오류가 발생합니다. 정수로 인덱스를 사용하려고하면 KeyError도 표시됩니다.

+0

시도', 상태 : @karthikr 유사

는에 의해 사전을 반복하는 것이 더 나은 보통이다, 말했다' – karthikr

+1

내가 그것을 문제없이 루프에서 작업 할 수 있습니다. 내 문제는 내가 직접 같은 키를 사용하여 사전에 액세스 할 수 없다는 것입니다 [상태 "" "]'. 나는 get 메소드를 사용하여 동작 할 것이라고 생각한다. 그래서, 만약 내가'states.get ("IN")'. 그것은 효과가있을 것이다. 이건 미친 짓이야 !!! – user2773013

+0

"IN"은 주 내에 있습니까? – Jesse

답변

3

인덱스로 값에 해당하는 키를 사용하여 사전에 액세스하려고한다고 생각하기 때문에 인덱스로 사전에 액세스 할 수 없습니다.

키가 사전에없는 경우에도 .get()None을 반환하므로 앱이 다운되지 않기 때문에 .get()이 적합하다고 생각합니다.

배포 할 때 "IN"이 실제로 응답 내에 있는지 확인하십시오. 주에서 약식에 대한

for key, value in dictionary.iteritems() 
관련 문제