I不能始终从给定的url.获得JSON --它的工作时间只有60%
jsonurl = urlopen('http://www.reddit.com/r/funny/hot.json?limit=16')
r_content = json.load(jsonurl)['data']['children']程序有时会在第二行崩溃,因为由于某些原因,url中的信息无法正确检索。
通过一些调试,我发现我从第一行中得到了以下错误:
<addinfourl at 4321460952 whose fp = <socket._fileobject object at 0x10185b050>>这个错误大约发生在40%的时间,其他60%的时间,代码完美地工作。我做错了什么?如何使url打开更加一致?
发布于 2013-07-05 05:48:26
这通常不是客户端的问题。您的代码在行为上是一致的,但是服务器响应可能会有所不同。
我运行了您的代码几次,它确实出现了某些问题:
>>> jsonurl = urlopen('http://www.reddit.com/r/funny/hot.json?limit=16')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 406, in open
response = meth(req, response)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 519, in http_response
'http', request, response, code, msg, hdrs)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 444, in error
return self._call_chain(*args)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 378, in _call_chain
result = func(*args)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 527, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 429: Unknown您必须处理服务器响应不是HTTP 200的情况。您可以将代码包装在try / except块中,只有在请求成功时,才应该将jsonurl传递给json.loads()。
此外,urlopen还返回一个类似文件的描述符。因此,如果您使用print jsourl,它只提供jsonurl.__repr__()值。见下文:
>>> jsonurl.__repr__()
'<addinfourl at 4393153672 whose fp = <socket._fileobject object at 0x105978450>>'您必须查找以下内容:
>>> jsonurl.getcode()
200
>>> 只有当它达到200时,才能处理从请求中获得的数据。
https://stackoverflow.com/questions/17481583
复制相似问题