3

いくつかの 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()
4

2 に答える 2

6

try except代わりに使用する必要があります:

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

Python チュートリアルの例外処理を参照してください。

実際には、その URL にリダイレクトされ、代わりに画像ページが表示されます。requestsJSON の取得に使用している場合は、代わりに応答履歴を確認してください。

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() 
于 2013-04-08T15:42:51.333 に答える
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
于 2013-04-08T15:45:01.543 に答える