[解決済み] Pythonのリクエストモジュールを使ってtry/exceptする正しい方法?
質問
try:
r = requests.get(url, params={'s': thing})
except requests.ConnectionError, e:
print e #should I also sys.exit(1) after this?
これは正しいのでしょうか?もっと良い構成はないのでしょうか?これですべてのベースがカバーできるでしょうか?
どのように解決するのですか?
リクエストを見てください。 例外に関する文書 . 要するに
ネットワークに問題が発生した場合 (例: DNS の失敗、接続拒否など)、Requests は
ConnectionError
例外が発生します。稀に無効な HTTP 応答が発生した場合、Requests は
HTTPError
例外が発生します。リクエストがタイムアウトした場合
Timeout
例外が発生します。リクエストが設定された最大リダイレクション数を超えた場合は
TooManyRedirects
例外が発生します。Requests が明示的に発生させる例外は、すべて
requests.exceptions.RequestException
.
あなたの質問に答えるために、あなたが表示するものは ではなく をすべてカバーします。タイムアウトによるエラーではなく、接続に関連するエラーのみを捕捉することができます。
例外をキャッチしたときにどうするかは、スクリプトやプログラムの設計次第です。終了してもいいのか?続けて再試行することはできますか? もしエラーが致命的で先に進めないのであれば、そうです。
システム終了
(エラーの表示と
sys.exit
).
ベースクラス例外をキャッチすることで、すべてのケースを処理することができます。
try:
r = requests.get(url, params={'s': thing})
except requests.exceptions.RequestException as e: # This is the correct syntax
raise SystemExit(e)
あるいは、別々にキャッチして違うことをすることもできます。
try:
r = requests.get(url, params={'s': thing})
except requests.exceptions.Timeout:
# Maybe set up for a retry, or continue in a retry loop
except requests.exceptions.TooManyRedirects:
# Tell the user their URL was bad and try a different one
except requests.exceptions.RequestException as e:
# catastrophic error. bail.
raise SystemExit(e)
として クリスチャン が指摘した。
httpエラー(例:401 Unauthorized)で例外を発生させたいときは
Response.raise_for_status
. これはHTTPError
もし、レスポンスが http エラーの場合。
一例です。
try:
r = requests.get('http://www.google.com/nothere')
r.raise_for_status()
except requests.exceptions.HTTPError as err:
raise SystemExit(err)
印刷されます。
404 Client Error: Not Found for url: http://www.google.com/nothere
関連
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
[解決済み] urllib、urllib2、urllib3、requestsモジュールの違いは何ですか?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み] Pythonで型をチェックする標準的な方法は何ですか?
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み] ファイルに行を書き込む正しい方法?
-
[解決済み] Pythonでホームディレクトリを取得するための正しいクロスプラットフォームな方法は何ですか?
-
[解決済み] すべての例外をキャッチする `try`/`except` ブロックはどのように書けばよいですか?
-
[解決済み] Python RequestsでJSONデータをPOSTする方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
PythonによるLeNetネットワークモデルの学習と予測
-
Python百行で韓服サークルの画像クロールを実現する
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み] TypeError: 'DataFrame' オブジェクトは呼び出し可能ではない
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない