2
다음 코드는 json 응답이 잘못된 요청을 나타내는 경우 이상한 동작을 보여줍니다. 응답을 로깅 한 다음 "if"블록을 누르는 대신 코드는 응답을 기록하고 즉시 첫 번째 로그 호출로 건너 뛰고 json/urlopen 호출 등을 다시 시도합니다.이 프로세스는 프로세스를 종료 할 때까지 무기한 반복됩니다 . json 응답이 url과 query가 유효하다는 것을 나타내면 ok, 프로그램의 흐름은 예상대로입니다.urllib2 및 simplejson을 통한 무한 루프
log.debug('Retreiving json response for %s' % url)
response = simplejson.load(urllib2.urlopen(url))
log.debug('Retreived json response: %s' % response)
if response['status'] in ['INVALID_REQUEST', 'REQUEST_DENIED', 'UNKNOWN_ERROR']:
print 'Problem with request: %s' % response['status']
그냥 문제를 설명하기 위해 생성 된 로그의 샘플을 포함했다 :
2012-12-26 09:41:31,505 - json_logger - DEBUG - Retreiving json response for ...
2012-12-26 09:41:31,510 - json_logger - DEBUG - Retreived json response: {'status': 'INVALID_REQUEST', 'results': []}
2012-12-26 09:41:31,512 - json_logger - DEBUG - Retreiving json response for ...
2012-12-26 09:41:31,530 - json_logger - DEBUG - Retreived json response: {'status': 'INVALID_REQUEST', 'results': []} ...
목 결과를 만든 urllib2가 개체의 읽기 메소드를 호출하고 있습니다 파일로 전송되지만 표준 출력으로 전송됩니다. 로그 파일에 표시되지 않습니다. 이 진술이 호출 된 문맥을 보여주십시오. – ditkin
첫 번째 로그 호출로 다시 넘어갈 것 같지 않습니다. 대부분의 경우 우리에게 표시되지 않은 코드의 다음 루프로 계속 진행될 것입니다. 실제 문제가있는 곳입니다. – abarnert
오류가 발생하면 루프를 중단하기 위해'break' 문을 사용하거나 다음 항목으로 계속하기 위해'continue'를 사용할 수 있습니다. – Wessie