9

Python ライブラリを使用してrequests、GET リクエストを作成し、次のようにタイムアウト例外 (およびここには示していない他の例外) を処理します。

import requests
timeout1=20
timeout2=40

try:
    #first attempt
    resp = requests.get(base_url+resource, params=payload, headers=headers,
    timeout=timeout1)
except requests.exceptions.Timeout:
    #timed out, retry once
    try:
       resp = requests.get(base_url+resource, params=payload, headers=headers,
       timeout=timeout2)
       return resp.json()
    except requests.exceptions.RequestException as e:
       #Still failed; return error code
       return -1

これはほとんどの場合問題なく動作しますが、私のプログラムsocket.timeout: timed outは をスローする代わりにエラーで完全に終了し、requests.exceptions.Timeoutこれがキャッチされて処理されることがあります。

リクエスト lib がこのように動作するのはなぜですか? これをどのように処理すればよいですか?

4

2 に答える 2

2

これは、リクエストが使用する urllib3 の問題だと思います。

https://github.com/kennethreitz/requests/issues/1236

その socket.timeout エラーをキャッチする必要があります。( Python requests モジュールを使用して試す/除く正しい方法での jb のコメントに基づく)

于 2016-02-19T07:59:31.047 に答える
2

答え:

try:
    data = sock.recv(256)
except socket.timeout:
    data="NO RESPONSE"

抜けません!

于 2014-09-08T19:18:15.413 に答える