這通常不是客戶端的問題。您的代碼在行爲上一致,但服務器響應可能會有所不同。
我跑你的代碼幾次,它拋出了一些問題:
>>> 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,你應該處理從該請求獲得的數據。
謝謝你的迴應非常豐富和樂於助人! – GangstaGraham