반응형
아무것도 반환되지 않을 때 JSON 디코딩 오류 처리
json 데이터를 구문 분석하고 있습니다. 구문 분석에 문제가 없으며 simplejson
모듈을 사용하고 있습니다. 그러나 일부 API 요청은 빈 값을 반환합니다. 내 예는 다음과 같습니다.
{
"all" : {
"count" : 0,
"questions" : [ ]
}
}
이것은 json 객체를 구문 분석하는 코드의 세그먼트입니다.
qByUser = byUsrUrlObj.read()
qUserData = json.loads(qByUser).decode('utf-8')
questionSubjs = qUserData["all"]["questions"]
일부 요청에 대해 언급했듯이 다음 오류가 발생합니다.
Traceback (most recent call last):
File "YahooQueryData.py", line 164, in <module>
qUserData = json.loads(qByUser)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/simplejson/__init__.py", line 385, in loads
return _default_decoder.decode(s)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/simplejson/decoder.py", line 402, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/simplejson/decoder.py", line 420, in raw_decode
raise JSONDecodeError("No JSON object could be decoded", s, idx)
simplejson.decoder.JSONDecodeError: No JSON object could be decoded: line 1 column 0 (char 0)
이 오류를 처리하는 가장 좋은 방법은 무엇입니까?
파이썬 프로그래밍에는 "허가보다 용서를 구하는 것이 더 쉽다"라는 규칙이 있습니다 (간단히 말하면 EAFP). 이는 유효성에 대한 값을 확인하는 대신 예외를 포착해야 함을 의미합니다.
따라서 다음을 시도하십시오.
try:
qByUser = byUsrUrlObj.read()
qUserData = json.loads(qByUser).decode('utf-8')
questionSubjs = qUserData["all"]["questions"]
except ValueError: # includes simplejson.decoder.JSONDecodeError
print 'Decoding JSON has failed'
편집 : simplejson.decoder.JSONDecodeError
실제로 ValueError
( 증거 여기 ) 에서 상속하기 때문에을 사용하여 catch 문을 단순화했습니다 ValueError
.
참조 URL : https://stackoverflow.com/questions/8381193/handle-json-decode-error-when-nothing-returned
반응형
'programing' 카테고리의 다른 글
urllib2를 사용하여 GET 대신 POST 호출 만들기 (0) | 2021.01.11 |
---|---|
.gitignore는 모든 파일을 무시하고 * .foo를 재귀 적으로 허용합니다. (0) | 2021.01.11 |
감독 된 하위 프로세스 중지 (0) | 2021.01.11 |
'grunt serve'가 'No Bower 구성 요소를 찾을 수 없음'을 표시하는 원인은 무엇입니까? (0) | 2021.01.10 |
Mac OSX에서 터미널을 사용하여 이미지 크기를 조정하는 방법은 무엇입니까? (0) | 2021.01.10 |