PythonでAPIとやりとりする際に欠かせないのが requests
ライブラリです。
その中でも Response.raise_for_status()
は「リクエストが失敗したかどうかを確認する」ための重要なメソッドです。
この記事では Response.raise_for_status()
の基本的な使い方から、活用方法、注意点までをわかりやすく丁寧に解説します。
Response.raise_for_status() とは?
Response.raise_for_status()
は、HTTPリクエストの結果がエラー(ステータスコードが 4xx や 5xx)だった場合に「例外(エラー)」を発生させるメソッドです。
通常、リクエストを送っただけでは、たとえ失敗していてもPython側は何もエラーを出しません。
しかし、Response.raise_for_status()
を使えば、失敗に気づいて適切な処理ができるようになります。
使い方
基本的な使い方
まずは Response.raise_for_status()
の基本的な使い方を見てみましょう。
1 2 3 4 5 |
import requests response = requests.get("https://httpbin.org/status/404") response.raise_for_status() |
このコードでは:
- 存在しないページ(ステータス404)にアクセスし、
Response.raise_for_status()
を呼び出すことでエラーを検出しています
この場合、requests.exceptions.HTTPError
というエラーが発生し、スクリプトの実行が止まります。
具体例:エラーをtry〜exceptで処理する
実際の開発では、エラーが起きてもスクリプトを止めずに処理を続けたいことがあります。
そんなときは try
~ except
を使って、エラーをキャッチしましょう。
1 2 3 4 5 6 7 8 9 |
import requests try: response = requests.get("https://httpbin.org/status/500") response.raise_for_status() except requests.exceptions.HTTPError as e: print("HTTPエラーが発生しました") print(e) |
このように書くことで:
- サーバーから500エラーが返ってきても、
- プログラムを止めずに「エラー処理」を行うことができます
具体例:成功時には何も起きない
成功(ステータス200など)のときは、Response.raise_for_status()
は何もしません。
1 2 3 4 5 6 7 |
import requests response = requests.get("https://httpbin.org/status/200") response.raise_for_status() print("成功しました") |
このコードではエラーは出ず、「成功しました」と表示されます。
つまり、Response.raise_for_status()
は「失敗したときだけ動作する安全装置」と考えるとよいでしょう。
.raise_for_status() を使う理由
HTTPリクエストは、たとえ失敗(404や500など)しても、Pythonのコード上では「普通に成功した」かのように扱われてしまいます。
1 2 3 |
response = requests.get("https://httpbin.org/status/404") print(response.status_code) # → 404 |
上記コードでは、エラーなのに例外は出ず、処理はそのまま続いてしまいます。
これでは問題に気づきにくく、バグの原因になりかねません。
Response.raise_for_status()
を使えば、こうしたエラーにすぐ気づいて対処できます。
使う場面として多いのは下記です。
- APIにアクセスしてデータを取得するとき
- フォームの送信結果を確認したいとき
- 外部サービスとの通信が成功したかチェックしたいとき
使えるオプションや注意点
自体には引数はありません。Response.raise_for_status()
ですが、次の点に注意して使うとより安全です。
- 通信そのものが失敗(タイムアウトなど)した場合は
.raise_for_status()
は呼ばれる前に例外が出る - そのため、
.raise_for_status()
を使う前に、通信エラーも考慮してtry
~except
を広めに使うと安心
1 2 3 4 5 6 7 8 9 |
import requests try: response = requests.get("https://example.com", timeout=5) response.raise_for_status() except requests.exceptions.RequestException as e: print("通信エラーまたはHTTPエラーが発生しました") print(e) |
まとめ
今回は Response.raise_for_status()
の使い方を詳しく紹介しました。
Response.raise_for_status()
はHTTPエラーを検出するための安全装置
- ステータスコードが 4xx や 5xx のときに例外が出る
- 通信が成功していれば何も起きず、そのまま続行できる
- エラー処理を
try
~except
で囲んで使うのが基本 - 通信エラーにも備えるなら
requests.exceptions.RequestException
を使うと安心
APIや外部サービスと連携するコードでは、 Response.raise_for_status()
)
を使って、エラーを検知できるようにしておきましょう!