Pythonのrequestsライブラリで学ぶHTTPエラー処理の基本
Pythonのライブラリであるrequestsは、HTTP通信を行う際に便利な機能を提供してくれます。requestsを使うことで、簡単にHTTPリクエストを送信し、レスポンスを受け取ることができます。
今回はPythonのリクエストライブラリであるrequestsについて、エラー処理について解説します。
この記事を読めば、requestsライブラリを使用してHTTPリクエストを送信する際に発生する可能性のあるエラーをキャッチして、適切なエラーメッセージを出力することができます。
これにより、プログラムがエラーで停止するのを防ぎ、ユーザーがエラーを解決するための情報を提供することができます。
また、エラーが発生した場合には、ログにエラー情報を記録するなど、適切な処理を行うこともできます。
spyderの使い方が分からない方や、エラーが出る方は下のボタンをクリックしてください。
spyderの使い方(ファイル作成・プログラム実行など)が分からない方はクリック
spiderのインストールがまだの方
「Anaconda Powershell Prompt」や「spyder」が分からない方は「Anacondaをインストール|pythonが動く環境を構築しよう」をご覧ください。
新しいファイルを作成する
画面上部のツールバーの中の「用紙」のようなアイコンをクリックすると作成できます。
ショートカットキー Ctrl+N でも作成することが可能です。
プログラムを全部実行する
画面上部のツールバーの中の「再生ボタン」のようなアイコンをクリックするとプログラムが動きます。書いてあるプログラムを全て実行します。
ショートカットキー F5 でも実行することが可能です。
プログラムを一部実行する
画面上部のツールバーの中の「カーソル」のようなアイコンをクリックすると、カーソルを置いている行のプログラムだけが実行されます。何行かを範囲選択している場合は、選択している行のプログラムだけが実行されます。
ショートカットキー F9 でも実行することが可能です。
ModuleNotFoundError が出る方はクリック
「ライブラリがインストールされてないですよ」というエラー文です。ライブラリをインストールして解消しましょう。インストールはとても簡単です。「Anaconda Powershell Prompt」を新たに立ち上げ、適切なコマンドを貼り付けてエンターを押すだけです。
ModuleNotFoundErrorに続く文字によって、コマンドが異なりますので、エラー文をよく見て適切なコマンドを貼り付けてください。
ModuleNotFoundError: No module named 'webdriver_manager'
pip install webdriver-manager
「Anaconda Powershell Prompt」を新しく立ち上げます。そこに上記コードをコピーしてエンターを押します。必要なライブラリが自動でインストールされるので、終わるまで待ちます。
ModuleNotFoundError: No module named 'selenium'
pip install selenium
「Anaconda Powershell Prompt」を新しく立ち上げます。そこに上記コードをコピーしてエンターを押します。必要なライブラリが自動でインストールされるので、終わるまで待ちます。
requestsライブラリのインストール
まずはじめに、requestsライブラリをインストールする必要があります。
Pythonのバージョンによっては、すでにインストールされている場合がありますが、以下のようにpipコマンドで簡単にインストールすることができます。
pip install requests
エラー処理の重要性
HTTP通信を行う上で、サーバー側で何らかのエラーが発生することがあります。
例えば、サーバーがダウンしている場合や、リクエストが不正である場合などがあります。
このようなエラーが発生した場合、正常なレスポンスが得られなくなるため、エラー処理を行う必要があります。
例外クラスのインポート
requestsライブラリのexceptionsモジュールから、特定のエラーをハンドリングするための例外クラスをインポートします。
from requests.exceptions import RequestException, ConnectionError, HTTPError, Timeout
RequestException
requestsモジュールで発生する全ての例外の基底クラスです。リクエストに関連する例外を一括して処理できます。
例えば、ConnectionErrorやHTTPErrorなどが含まれます。
この例外を捕捉しておけば、より広範囲の例外をキャッチできるため、安全なエラー処理が可能になります。
ConnectionError
インターネット接続エラーが発生した場合に発生する例外です。
具体的には、DNSの名前解決エラー、接続タイムアウト、接続拒否などが含まれます。
これらのエラーは、通常、ネットワークに問題がある場合に発生します。
HTTPError
HTTPステータスコードがエラーを示す場合に発生する例外です。
ステータスコードが400以上の場合にHTTPErrorが発生します。
例えば、サーバーがリクエストを理解できない場合(400 Bad Request)、認証エラーが発生した場合(401 Unauthorized)、アクセスが禁止された場合(403 Forbidden)、リソースが見つからない場合(404 Not Found)など、多数のエラーが考えられます。
Timeout
リクエストのタイムアウトが発生した場合に発生する例外です。
リクエストの送信または受信に指定された時間がかかりすぎた場合にTimeoutが発生します。
例えば、サーバーが非常に遅い場合や、ネットワークが混雑している場合に発生する可能性があります。
requestsでのエラー処理
requestsでは、HTTP通信時に発生したエラーをキャッチすることができます。具体的には、以下のようなエラーがあります。
- ConnectionError: 接続に失敗した場合に発生します。
- HTTPError: HTTPステータスコードがエラーを示している場合に発生します。
- Timeout: タイムアウトが発生した場合に発生します。
- RequestException: 上記以外のエラーが発生した場合に発生します。
これらのエラーをキャッチするために、try-except文を使います。以下は、requestsでHTTPリクエストを送信した際に、発生する可能性があるエラーをキャッチしています。
import requests
from requests.exceptions import RequestException, ConnectionError, HTTPError, Timeout
try:
response = requests.get("https://example.com")
response.raise_for_status()
except ConnectionError as ce:
print("Connection Error:", ce)
except HTTPError as he:
print("HTTP Error:", he)
except Timeout as te:
print("Timeout Error:", te)
except RequestException as re:
print("Error:", re)
上記の例では、requests.get()でHTTPリクエストを送信して、response.raise_for_status()でステータスコードがエラーである場合にHTTPErrorを発生させます。
その後、発生する可能性のある各種エラーをtry-exceptでキャッチし、エラーの種類に応じたメッセージを表示するようにしています。
response.raise_for_status()とは
response.raise_for_status()は、HTTPステータスコードがエラーを示す場合にHTTPErrorを発生させます。
200番台以外のステータスコードが返された場合に例外を発生させるため、応答が成功か失敗かを簡単に確認できます。
例外をキャッチすることで、エラーが発生した場合に適切に処理できるようになります。
HTTPステータスコードについて
各HTTPステータスコードについても説明します。
よく使われるHTTPステータスコードの一部です。これらのステータスコードに対して適切な対応を行うことが重要です。
400 Bad Request
クライアントが送信したリクエストが無効であることを示します。リクエストパラメータの欠落や誤った形式、不正な値などが原因で発生する場合があります。
401 Unauthorized
認証が必要なエンドポイントへのアクセスが許可されていないことを示します。通常、認証情報が正しくない場合や、認証情報が必要な場合に送信されるエラーコードです。
403 Forbidden
クライアントがアクセスしようとしたリソースへのアクセスが許可されていないことを示します。アクセス制御の設定が不適切である場合、またはクライアントの権限が不足している場合に発生することがあります。
404 Not Found
リクエストされたリソースが存在しないことを示します。URLのタイプミスや、対象リソースが削除された場合などに発生することがあります。
500 Internal Server Error
サーバ内部でエラーが発生したことを示します。処理の失敗、サーバが正常に動作していない、リソースの不足などが原因で発生することがあります。
502 Bad Gateway
ゲートウェイエラーを示します。アクセスしようとしたサーバと通信できない場合、またはサーバが不適切なレスポンスを返した場合に発生することがあります。
503 Service Unavailable
サービスが利用不可であることを示します。サービスが過負荷状態である場合、メンテナンス中である場合などに発生することがあります。
まとめ
Pythonのrequestsライブラリを用いてHTTPリクエストを送信する場合、エラーが発生する可能性があります。そのため、エラー処理を行う必要があります。requestsライブラリでは、RequestException、ConnectionError、HTTPError、Timeoutといった例外を定義しており、これらを捕捉することでエラー処理を行うことができます。
特に、raise_for_status()メソッドはHTTPエラーが発生した場合に例外を発生させるため、このメソッドを使用することでHTTPエラーの判別が容易になります。
エラー処理によって、プログラムが予期せぬ終了をしなくなるだけでなく、例外に対応した処理を行うことで、より堅牢なプログラムを作成することができます。
ひとり親家庭・働く女性支援!MamaEduプロジェクト!
ひとり親家庭の方々に向けた、Webスキルを身に着けることができる「インターネット・アカデミー」をご紹介します。インターネット・アカデミーは、1995年に開校した日本初のWeb専門スクールで、Webデザイン、Webマーケティング、プログラミング、動画編集など、現場で活躍できるIT人材の育成を行っています。3万人以上の卒業生が活躍しており、2022年にはTBSテレビ「news23」のSDGs特集でも紹介されるなど、注目を集めています。
特に、ひとり親向けの給付金制度を活用した場合、最大で193万円受給しながら勉強ができるという大変お得なシステムがあります。Webデザイン、Webマーケティング、プログラミングなど、15コース以上の給付金対象のコースがあり、国の給付金を活用して学べる点が魅力です。また、キャリアプロデューサーによる就職支援や、女性向けの「mamaeduプロジェクト」など、ひとり親家庭の方々をサポートする取り組みも充実しています。
Webスキルを身に着けることによって、将来的には自分自身のキャリアアップにもつながりますし、求人市場でも高い需要があります。是非、インターネット・アカデミーを通じて、新しいスキルを身に着け、将来の夢を実現してみてはいかがでしょうか。
投稿
- SQL基礎知識〜データ型編〜 (2021年11月28日)
- SQL基礎知識〜PRIMARY KEY編〜 (2021年11月28日)
- SQL基礎知識〜テーブルの制約編〜 (2021年11月29日)
- SQL基礎知識〜DROP・DELETE・TRUNCATE編〜 (2022年4月2日)
- Anacondaをインストール|pythonが動く環境を構築しよう (2022年4月4日)
- Spyder5の日本語化|pythonを書きやすくしよう (2022年4月10日)
- pythonでPOS+foodレジ(ポスタスフード)の管理画面から売上CSVをダウンロードする|自作する業務自動化ツール (2022年5月29日)
- Pythonでファイルやフォルダを自動でバックアップする方法|自作する業務自動化ツール (2022年7月17日)
- PythonのrequestsライブラリでHTTPリクエストを送信する方法:基本的な使い方からファイルのアップロード、セッションの使用まで (2023年3月18日)
- Pythonのrequestsライブラリで学ぶHTTPエラー処理の基本 (2023年3月19日)
- CSVファイルをPandasで読み込もう!read_csvの使い方とオプション解説 (2023年3月21日)
- データ集計を簡単に!Pandasのgroupby()メソッドの活用法 (2023年3月22日)
- Python Lambda関数入門:便利な書き方と使い方 (2023年3月23日)