pythonライブラリリクエストで例外を処理する方法?たとえば、PCがインターネットに接続されていることを確認する方法は?
しようとすると
try:
requests.get('http://www.google.com')
except ConnectionError:
# handle the exception
エラー名ConnectionError
が定義されていません
あなたがimport requests
、必要なrequests.ConnectionError
。 ConnectionError
は、requests
で定義された例外です。 APIドキュメント を参照してください。
したがって、コードは次のようになります。
try:
requests.get('http://www.google.com')
except requests.ConnectionError:
# handle the exception
明確にするために、それは
except requests.ConnectionError:
ない
import requests.ConnectionError
また、一般的な例外をキャッチすることもできます(ただし、これは推奨されません)。
except Exception:
実際、requests.get()
が生成できる例外は、ConnectionError
だけではありません。実稼働環境で見たものを以下に示します。
from requests import ReadTimeout, ConnectTimeout, HTTPError, Timeout, ConnectionError
try:
r = requests.get(url, timeout=6.0)
except (ConnectTimeout, HTTPError, ReadTimeout, Timeout, ConnectionError):
continue
import requests
を使用して要求モジュールを含めます。
例外処理を実装することは常に適切です。スクリプトの予期しない終了を回避するのに役立つだけでなく、エラーや情報通知を記録するのにも役立ちます。 Pythonリクエストを使用する場合、次のような例外をキャッチすることを好みます。
try:
res = requests.get(adress,timeout=30)
except requests.ConnectionError as e:
print("OOPS!! Connection Error. Make sure you are connected to Internet. Technical Details given below.\n")
print(str(e))
continue
except requests.Timeout as e:
print("OOPS!! Timeout Error")
print(str(e))
continue
except requests.RequestException as e:
print("OOPS!! General Error")
print(str(e))
continue
except KeyboardInterrupt:
print("Someone closed the program")
ドキュメント に従って、以下の点を追加しました:-
ネットワークの問題(接続の拒否、インターネットの問題など)が発生した場合、リクエストはConnectionError例外を発生させます。
try:
requests.get('http://www.google.com')
except requests.ConnectionError:
# handle ConnectionError the exception
まれに無効なHTTP応答が発生した場合、リクエストはHTTPError例外を発生させます。 HTTP要求が失敗したステータスコードを返した場合、Response.raise_for_status()はHTTPErrorを発生させます。
try:
r = requests.get('http://www.google.com/nowhere')
r.raise_for_status()
except requests.exceptions.HTTPError as err:
#handle the HTTPError request here
リクエストがタイムアウトした場合、タイムアウト例外が発生します。
タイムアウト引数を使用して、指定された秒数後に応答の待機を停止するようにリクエストに指示できます。
requests.get('https://github.com/', timeout=0.001)
# timeout is not a time limit on the entire response download; rather,
# an exception is raised if the server has not issued a response for
# timeout seconds
Requestsが明示的に発生させるすべての例外は、requests.exceptions.RequestExceptionから継承します。したがって、ベースハンドラーは次のようになります。
try:
r = requests.get(url)
except requests.exceptions.RequestException as e:
# handle all the errors here