2012-12-27 2 views
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': []} ... 
+1

목 결과를 만든 urllib2가 개체의 읽기 메소드를 호출하고 있습니다 파일로 전송되지만 표준 출력으로 전송됩니다. 로그 파일에 표시되지 않습니다. 이 진술이 호출 된 문맥을 보여주십시오. – ditkin

+0

첫 번째 로그 호출로 다시 넘어갈 것 같지 않습니다. 대부분의 경우 우리에게 표시되지 않은 코드의 다음 루프로 계속 진행될 것입니다. 실제 문제가있는 곳입니다. – abarnert

+0

오류가 발생하면 루프를 중단하기 위해'break' 문을 사용하거나 다음 항목으로 계속하기 위해'continue'를 사용할 수 있습니다. – Wessie

답변

0

당신이 simplejson의 구현을 사용하지 않도록 할 수 있습니까, 그리고 바로 다음합니까?

response = simplejson.loads(urllib2.urlopen(url).read()) 

나는 문자열을로드하는 대신 부하의 부하를 사용하고 당신이 로그에되지 않습니다 인쇄 문의