我正在浏览一些URL,我可以从我正在使用的API中获取大部分数据。 * Imgur API。但是,当它找到之前已发布但最终被删除的图像时,它仍显示正向URL获取响应(代码200),并且当我使用
时 j1 = json.loads(r_positive.text)
我收到此错误:
http://imgur.com/gallery/cJPSzbu.json
<Response [200]>
Traceback (most recent call last):
File "image_poller_multiple.py", line 61, in <module>
j1 = json.loads(r_positive.text)
File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
如何“获取”j1变量中的错误呢?我想使用条件结构来解决问题并避免我的程序崩溃。像
这样的东西if j1 == ValueError:
continue
else:
do_next_procedures()
答案 0 :(得分:6)
您需要使用try
except
代替:
try:
j1 = json.loads(r_positive.text)
except ValueError:
# decoding failed
continue
else:
do_next_procedures()
请参阅Python教程中的Handling Exceptions。
真正发生的是您为该网址重定向,而是获得了图片页面。如果您使用requests
来获取JSON,请改为the response history:
if r_positive.history:
# more than one request, we were redirected:
continue
else:
j1 = r_positive.json()
或者你甚至可以禁止重定向:
r = requests.post(url, allow_redirects=False)
if r.status == 200:
j1 = r.json()
答案 1 :(得分:1)
您列出的网址会将您重定向到HTML网页。 (使用curl
检查这样的事情,他是你的朋友。)
HTML页面显然无法解析为JSON。
你可能需要的是:
response = fetch_the_url(url)
if response.status == 200:
try:
j1 = json.loads(response.text)
except ValueError:
# json can't be parsed
continue