ValueError:不能解码JSON对象,但是正数

问题描述 投票:3回答:2

我正在浏览一些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()
python json url
2个回答
6
投票

您需要改用try except

try:
    j1 = json.loads(r_positive.text)
except ValueError:
    # decoding failed
    continue
else:
    do_next_procedures()

请参见Python教程中的Handling Exceptions

真正发生的[[真正是,您已为该URL重定向,而是获得了图像页面。如果使用requests来获取JSON,请改为查看the response history

if r_positive.history: # more than one request, we were redirected: continue else: j1 = r_positive.json()
或者您甚至可以

disallow

重定向:r = requests.post(url, allow_redirects=False) if r.status == 200: j1 = r.json()

1
投票
您列出的URL将您重定向到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

© www.soinside.com 2019 - 2024. All rights reserved.