2010-12-21 4 views
1

JSON 디코딩 오류 및 KeyErrors에 대한 JSON 페이로드를 확인하는 메소드가 있습니다. 어떤 이유에서 KeyError과 함께 except 문이 호출되고 있지만 사실상 KeyError이 없으므로 None이라는 표시가 나타납니다.왜 전화를 제외하고 있습니까? - Python

try: 
     test_data = simplejson.loads(self.raw_data) # Loads the data in a dict to test for the right fields 
     test_data["test"] 

    except simplejson.decoder.JSONDecodeError as jsonErr: 
     print 'JSON Malform Error: ', jsonErr 
     pass 
     return False 

    except KeyError as keyErr: 
     print 'JSON Validation Error: ', keyErr 
     pass 
+2

'except KeyError'를 제거하고 추적을 제공하십시오 (이 질문에 답할 수 있습니다). 'raw_data'도 도움이 될 수 있습니다. –

+0

바로 그 이유 때문에 뭔가를 인쇄하기 위해 예외를 잡아서는 안됩니다. – Falmarri

+0

이 질문은 다른가요? http://stackoverflow.com/questions/2946768 – DarenW

답변

1

는 KeyError를 아마 simplejson.loads에 의해 제기되고 잘못된 키가 정말 None을 할 수있다 : 여기에 코드입니다. 더 말할 수있는 상황이 충분하지 않습니다. 물어 보면 역 추적을하면 크게 도움이 될 것입니다.

+0

추적 코드는 다음과 같습니다. 추적 (가장 최근 호출 마지막) : 파일 "./jsontest.py", 44 행, __validate_data 파일 test_data [ "test"] – skylerl

0

추적을 통해 보면 예외가 발생한 모듈을 알 수 있습니다. ipdb을 사용하여 수동으로 앞뒤로 이동하여 다음과 같은 문제를 디버깅 할 수도 있습니다. 더 나아가, 파이썬의 Exception 클래스를 상속 받아서 코드를 올리고 예외적으로 자신의 코드를보다 잘 제어 할 수 있어야합니다.

해당 없음 반환되는 경우에 사용자 정의 예외를 발생시기를 알려줍니다 test_data에 getattr 사용 :

활용 파이썬의 getattr 및 않은 setattr 기능도 많은 도움이됩니다.

관련 문제