Skip to main content
 首页 » 编程设计

python之使用 urllib2 和 simplejson 无限循环

2025年05月04日13langtianya

当 json 响应指示无效请求时,以下代码表现出奇怪的行为。代码将记录响应并立即再次跳转到第一个日志调用,然后重试 json/urlopen 调用等,而不是记录响应然后点击“if” block 。这个过程将无限期地重复,直到我终止该过程.请注意,当 json 响应表明 url 和查询有效且正常时,程序的流程正如您所期望的那样。

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': []} ... 

请您参考如下方法:

是否可以避免使用 simplejson 的实现,而只执行以下操作?

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

我使用 loads 而不是 load 来加载字符串,并且只是在您创建的 urllib2 对象上调用 read 方法