Pythonのrequestsライブラリで学ぶHTTPエラー処理の基本

Pythonのライブラリであるrequestsは、HTTP通信を行う際に便利な機能を提供してくれます。requestsを使うことで、簡単にHTTPリクエストを送信し、レスポンスを受け取ることができます。

今回はPythonのリクエストライブラリであるrequestsについて、エラー処理について解説します。

できること

  • 例外クラスの継承関係を理解することで、適切な例外処理ができるようになる。
  • HTTPステータスコードに応じて例外処理をすることで、リクエストの成否を確認できる。
  • raise_for_status()メソッドを使うことで、HTTPステータスコードを確認しながら例外処理ができる。
  • ConnectionError、Timeoutなどの例外クラスを使って、ネットワーク接続エラーに対処できる。

この記事を読めば、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」を新しく立ち上げます。そこに上記コードをコピーしてエンターを押します。必要なライブラリが自動でインストールされるので、終わるまで待ちます。

読み終わりまで
短い
10分
以内
20分位
30分位
40分位
60分
以上
長い

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スキルを身に着けることによって、将来的には自分自身のキャリアアップにもつながりますし、求人市場でも高い需要があります。是非、インターネット・アカデミーを通じて、新しいスキルを身に着け、将来の夢を実現してみてはいかがでしょうか。

<strong>しゃちく</strong><span data-color="#7bdcb5" style="background: linear-gradient(transparent 60%,rgba(123, 220, 181, 0.7) 0);" class="vk_highlighter"><br></span>
しゃちく

福岡の中小企業で、社内SEとして勤務。
主な業務は、通販の運営、自社飲食店のハンディやレジの設定、PCトラブル対応、LP作成、HP更新など。
Pythonで業務自動化ツールを100個以上自作した経験をもとに、ツールを作る方法をメインにブログを更新している。
このブログが、誰かのお役に立てば幸いです!

投稿





コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です