2014-07-24 5 views
-4

위치에서 JSON 덤프를 검색하고 저장된 사전의 값을 확인하는 코드가 있습니다.키 오류 u'True 파이썬 사전에 저장된 JSON 덤프의 값을 확인할 때주의하십시오

내 JSON 덤프는 다음과 같습니다 : 나는 키 값 쌍을 검색하고 내 기대 값과 비교하는 것을 시도하고있다

{ 
    u'response': { 
     u'username': u'robo', 
     u'first_name': u'robot-update', 
     u'last_name': u'frmwrk-update', 
     u'is_deleted': False, 
     u'entity_type': u'user', 
     u'admin': True, 
     u'image': { 
      u'complete_json': True, 
      u'entity_type': u'image', 
      u'original': u'/images/default-user-icon.png', 
      u'icon': u'/images/default-user-icon.png' 
     }, 
     u'title': u'update-title', 
     u'email': u'[email protected]', 
     u'dept': u'update-department', 
     u'subscribed_to_emails': True, 
     u'notes': u'update-note', 
     u'complete_json': True, 
     u'id': 177, 
     u'tags': [], 
     u'developer': True 
    } 
} 

.

내 코드는 user_info 덤프 내 json으로 돌아 오기 다음과 같습니다

def check_user_info(self, user_name, key_value, expected_value): 
     logger.info("Checking to see if the - {0} is the same as the expected value  {1}...".format(field_value, expected_value)) 
     user_info = self.my_api.get_user_info(self.token, self.app_address, user_name) 
     logger.console("json dumps------ {0}".format(user_info)) 
     logger.console("the check value is-- {0}".format(user_info['response'][field_value])) 
     check_value = user_info['response'][field_value] 
     logger.info("field value is {0}".format(user_info['response'][field_value])) 
     if check_value == expected_value: 
      logger.info("The test value {0} is the same as expected value {1}".format(check_value, expected_value)) 

나는 이름, 성 또는 이메일에 대한 값을 조회하려고

. 나는 그 방법을 통해 얻는다. 내가 관리자 값을 얻으려고하지만 나는 KeyError를의 u'True을 얻을

친절은 내가이기 때문에 잘못된

+1

복제 할 수 없습니다. 코드 스 니펫을 확장 할 수 있습니까? – Andy

+0

user_info = self.my_api.get_user_info (self.token, self.app_address, user_name) –

+0

Andy-- 질문에 편집 된 코드를 참조하십시오. 전체 메소드를 내었습니다 –

답변

0

디버깅의 첫 번째 규칙은 오류 메시지가 당신에게 진실을 말하고 있다고 가정하는 것입니다. 이 경우에는 keyerror u'True이 표시됩니다.

이것은 코드의 어딘가에서 some_dictionary[u'True']에 해당하는 것을 의미합니다. 게시 한 코드에는 리터럴 값 True을 키로 사용하는 것이 없으므로 변수에 있어야합니다. 실제 오류를 게시하지 않았으므로 어떤 줄이 오류를 일으키는 지 추측해야합니다.

대부분이 코드에서 오류가 발생했습니다 : user_info['response'][field_value]). 즉 field_value 일 가능성이 높습니다. u'True'입니다. 질문은 이제 이되어 왜이 사실입니까? 귀하의 코드는 그 가치가 어디서 비롯되는지 보여주지 않으므로 그에 대한 대답은 할 수 없습니다. 해당 변수를 설정하는 곳에서 몇 가지 추가 디버깅을해야합니다.

은 변수의 이름을 보면, 당신은 를 포함 할 변수를 기대하고 있지만 당신은 로 사용하고 나타납니다. 아마도 이것이 문제일까요? 코드 줄이 user_info['response'][user_name]이어야합니다 (즉, key_valueuser_name으로 바꿉니 까?).

0

, 당신의 코드가 field_valueNameError 제기하고있는 중이 알려, 그래서 그것의 가정하십시오 실제 코드가 아닙니다. 이제 오류 을 입력하면이 표시되고 expected_value 대신 을 key_value (물론 KeyError이라고합니다)으로 사용하려는 것 같습니다.