1. はじめに|なぜ「例外をわざと発生」させるの?
プログラムを書いていると、「あれ?この条件のときは動かしてほしくないな…」と思う場面に出くわすことがあります。たとえば、読み込んだファイルの中におかしなデータが混じっていたり、Webから取得したデータが空っぽだったり。こんなとき、そのまま処理を続けると、あとで思わぬエラーが出たり、データが壊れたりしてしまうことがあります。
そんなときに便利なのが、意図的にエラー(例外)を発生させる raise 文です。
普通、例外といえば「0で割ったとき」や「存在しないファイルを開こうとしたとき」に、Pythonが自動で起こしてくれるものをイメージすると思いますよね。でも実は、プログラマー自身の判断で「ここは止めたほうがいい」と思ったときに、自分の手で例外を起こすこともできるんです。
これは「バグを未然に防ぐ安全装置」のような役割。あとになって困らないように、早めにプログラムを止めておくことで、原因の特定もスムーズになります。
この記事では、Pythonで例外を意図的に発生させる方法(raiseの使い方)と、その具体的な使いどころをやさしく解説していきます。初めて使う方でも安心して読めるように、実例も交えて紹介しますので、ぜひ最後まで読んでみてください!
2. 例外とは何か?Pythonにおけるエラーの基本
まずは、そもそも「例外」って何?というところから確認しましょう。
プログラムを実行していると、人間のミスや外部のトラブルなどが原因で、うまく処理できないことがよくあります。たとえばこんなケースです:
- 0で割り算しようとしたとき
- 存在しないファイルを開こうとしたとき
- ネットが切れていてWebからデータを取れなかったとき
- 数字しか入らないはずの場所に文字が入っていたとき
こういった「処理を続けられない問題」が発生すると、Pythonは自動で「例外(Exception)」を発生させてプログラムを止めます。これが、よく見かける赤文字のエラーメッセージ、いわゆるトレースバックです。
x = 10 / 0
# ZeroDivisionError: division by zero
このように、Pythonが自動で発生させる例外には名前が付いていて、問題の種類ごとに違うクラス(ZeroDivisionErrorやFileNotFoundErrorなど)で表されます。
Pythonの例外処理は「安全のため」
実はこの例外処理、エラーの発見だけでなく、プログラム全体が壊れるのを防ぐための仕組みなんです。
エラーが起きたまま処理を続けると、変な値が保存されたり、データベースが壊れたり、大事故になりかねません。だからPythonは「おかしなことが起きたら、いったん止まろう!」という判断をしてくれます。
そしてこの仕組みを自分のタイミングで使えるようにするのが、raise文です。自動で発生するだけじゃなく、「自分で例外を作る」こともできるようになると、コードの安全性がグッと上がります。
3. raise文の基本的な使い方
ここからは、実際にPythonで意図的に例外を発生させる方法を見ていきましょう。その中心になるのが raise 文です。
基本の書き方
Pythonでは、以下のように raise に例外クラスを指定するだけで、エラーを自分で発生させることができます。
raise ValueError("不正な値が入力されました")
実行すると、次のようなエラーメッセージが表示されて、プログラムが止まります。
Traceback (most recent call last):
File "example.py", line 1, in <module>
raise ValueError("不正な値が入力されました")
ValueError: 不正な値が入力されました
このように、エラーメッセージを自分で指定できるのが大きなポイントです。「何がダメだったのか」を具体的に書いておけば、あとでエラーを見たときに原因がすぐにわかります。
例外クラスだけを指定する方法
次のように、クラス名だけを書いて発生させることもできます。
raise RuntimeError
この場合は、引数なしの例外オブジェクトが自動で作られて発生します。ただし、理由を伝えるメッセージがないので、トラブル対応が難しくなります。実用では、なるべくメッセージ付きで書くのがおすすめです。
よく使う例外クラス
raise文でよく使われるPython標準の例外クラスには、次のようなものがあります:
| クラス名 | 主な用途例 |
|---|---|
ValueError | 値の内容がおかしいとき(例:int(“abc”)) |
TypeError | 型が不正なとき(例:”文字列” + 123) |
RuntimeError | その他、実行時に予期しないエラーが起きたとき |
例:ユーザー入力に問題があったとき
age = input("年齢を入力してください: ")
if not age.isdigit():
raise ValueError("年齢には数字を入力してください")
ここでは、isdigit()で数値かどうかをチェックし、ダメだったらすぐに止めています。後から変なデータが原因で別の場所でエラーが出るよりも、早い段階で教えてくれた方が安心ですよね。

このように、raise文を使えば「おかしな状態」を見つけたタイミングで、すぐに処理を止めてエラーを出すことができます。
次は、実際にどんな場面で raise を使うと便利なのか、実用的なケースを見てみましょう!
4. 使いどころ1|ファイルデータのバリデーションチェック
Pythonを使ってCSVファイルなどのデータを読み込む場面では、ファイルの中身が想定通りかどうかを確認することがとても重要です。なぜなら、もしデータに問題があった場合、そのまま後続の処理を続けてしまうと、計算ミスやアプリのクラッシュにつながるからです。
例:数値が入っているはずのカラムに文字列が…
たとえば、次のようなCSVファイルを想定してみましょう。
名前,年齢
田中,25
鈴木,30
山本,三十
「年齢」はすべて数字であるべきですが、「山本」さんの行には「三十」という文字列が入っています。このまま int() で変換して計算に使おうとすると、プログラムが途中で止まってしまいます。
データチェック+raiseで早期にエラーを出す
こういった問題を後から気づくのではなく、読み込み直後にチェックして、明確なメッセージとともに例外を発生させるのがベストです。
import csv
with open("data.csv", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
age_str = row["年齢"]
if not age_str.isdigit():
raise ValueError(f"{row['名前']}さんの年齢が不正です: {age_str}")
age = int(age_str) # 安心して変換できる!
このようにしておけば、「山本さんの年齢が不正です: 三十」といった具体的なエラーを表示でき、原因をすぐに特定できます。プログラム全体が意味不明なエラーで止まるより、ずっとわかりやすいですよね。
チェックは早めに!原則は「入り口で検査、後は安心」
データ処理でよく言われる原則に、「入り口でしっかり検査し、後の処理はそのまま信じる」という考え方があります。raise文を使えば、この「入り口チェック」を簡単に実現できます。

次は、APIからのデータ取得など外部とのやり取りで、raise がどんなふうに使われるのかを見ていきましょう!
5. 使いどころ2|Web APIのステータスコード検証
最近のPythonプログラムでは、外部のWebサービスやAPIとやり取りをする処理もよくあります。たとえば、天気予報データやニュース記事、チャットボットとの会話など、インターネットからデータを取得する場面ですね。
でも、ここで注意したいのが「取得できたデータが正しいとは限らない」ということです。
ステータスコードってなに?
Web APIを呼び出したとき、サーバーは「ちゃんと処理できましたよ」「失敗しましたよ」といった情報を、ステータスコードという形で返してくれます。
| ステータスコード | 意味 |
|---|---|
| 200 | 成功(OK) |
| 400番台 | クライアント側のエラー(例:URLミス、認証エラー) |
| 500番台 | サーバー側のエラー(例:サーバーダウン) |
APIの呼び出し自体は成功しても、実はデータが空だったり、サーバーが壊れていたりすることもあるので、ステータスコードのチェックはとても大事です。
raiseで不正なレスポンスを検出!
Pythonのrequestsライブラリでは、レスポンスオブジェクトの raise_for_status() メソッドを使うと、400番台や500番台のエラーが返ってきたときに自動で例外(HTTPError)を発生させてくれます。
import requests
url = "https://example.com/api/data"
response = requests.get(url)
# ステータスコードをチェックして、エラーなら例外を発生
response.raise_for_status()
# ↓ここにくるのは、200 OK のときだけ!
data = response.json()
print(data)
このようにしておけば、「500 Internal Server Error」などが返ってきたときに、その場でプログラムを止めることができ、トラブルの原因を早めに発見できます。
クライアントエラー(400番台)の扱いはケースバイケース
たとえば「ユーザーが入力したIDが間違っていた」など、**ユーザー側の操作で修正可能な場合(400番台)**は、プログラムを止めずに、画面上に注意メッセージを表示するだけにすることもあります。
if response.status_code == 404:
print("データが見つかりませんでした。IDを確認してください。")
else:
response.raise_for_status()
こうした柔軟な対応も、ステータスコードと raise を組み合わせることで簡単に実現できます。

次は、さらに応用編として、「自分でオリジナルの例外クラスを作って使う」方法を見ていきましょう!
6. 使いどころ3|例外クラスをカスタマイズする
Pythonにはたくさんの標準例外クラスがありますが、自分専用のオリジナル例外クラスを作ることもできます。
「この処理でだけ使うエラーを作りたい」
「システムの層ごとにエラーを分けて管理したい」
そんなときに便利なのが**自作例外クラス(カスタム例外)**です。
自作例外クラスの作り方
Pythonで例外クラスを作るには、Exception クラスを継承して新しいクラスを定義します。基本形はとてもシンプルです。
class MyCustomError(Exception):
pass
これだけで、MyCustomError という例外が作られました。これを raise で使えばOKです。
raise MyCustomError("これは自作の例外です!")
実用例:特定の処理だけで使うエラー
例えば、あるシステムで「ユーザー認証に失敗したときだけ」出す例外を作りたいとします。
class AuthenticationError(Exception):
pass
def login(user_id, password):
if user_id != "admin" or password != "1234":
raise AuthenticationError("ログインに失敗しました")
# 実行
login("user", "0000")
このようにしておけば、ログイン処理だけに関係するエラーを他と区別して扱うことができます。
元のエラーを自作例外に変換して投げ直す(ラップ)
もう一つ便利な使い方は、他の例外を捕まえて、自作の例外として投げ直す(再raise)方法です。
class DataLoadError(Exception):
pass
try:
with open("data.csv") as f:
content = f.read()
except FileNotFoundError as e:
raise DataLoadError("データファイルが見つかりませんでした") from e
ここでは、もともとの FileNotFoundError をキャッチして、自作の DataLoadError に変換しています。そして from e を付けることで、元のエラー情報もトレースバックに残ります。
カスタム例外のメリット
- try-exceptで細かく処理を分けられる
- ログやメッセージでエラーの原因がすぐ分かる
- システムの構造や役割に合わせた設計ができる

複数の処理が絡むような大きなプログラムや、外部システムと連携するアプリでは、カスタム例外があるだけでメンテナンスがグッと楽になります。
7. よく使う標準例外クラス
ここでは、Pythonで raise 文を使って意図的にエラーを発生させるときによく利用される標準の例外クラスを紹介します。状況に応じて適切なクラスを選ぶことで、エラーメッセージの意味が明確になり、デバッグやログ解析がしやすくなります。
🔸 ValueError(値が不正なとき)
どんなときに使う?
変数の値が「型としてはOKだけど中身がダメ」という場合。
例:数値として変換できない文字列を渡されたとき
age_str = "abc"
if not age_str.isdigit():
raise ValueError("年齢には数値を入力してください")
使いどころ:
- ユーザー入力のバリデーション
- 設定ファイルの読み込み時
- 数値変換エラーなど
🔸 TypeError(型が不正なとき)
どんなときに使う?
変数の型そのものが想定と違うとき。
例:文字列と数値を加算しようとしたとき
value = "100"
if not isinstance(value, int):
raise TypeError("整数型である必要があります")
使いどころ:
- 関数に渡された引数の型チェック
- オブジェクト同士の演算・比較
🔸 RuntimeError(実行時の一般的なエラー)
どんなときに使う?
特定のエラー分類に当てはまらないけど、「これは問題だ」というとき。
例:Web APIが内部サーバーエラーを返したとき
status_code = 503
if status_code >= 500:
raise RuntimeError("サーバー内部エラーが発生しました")
使いどころ:
- 外部サービスとの通信失敗
- システム内部で発生した異常な状態
- 想定外の処理フローになったとき
その他の代表的な標準例外(状況次第で使う)
| 例外クラス名 | 用途例 |
|---|---|
FileNotFoundError | ファイルが存在しないとき |
KeyError | 辞書に存在しないキーを指定したとき |
IndexError | リストの範囲外のインデックスを指定したとき |
ZeroDivisionError | 0で割ろうとしたとき |

どの例外クラスを使う場合でも、raiseで渡すエラーメッセージはとても重要です。「なにが」「どの値で」「どうダメだったのか」を簡潔に伝えることで、将来の自分や他の人がデバッグするときに非常に役立ちます。
8. まとめ|raiseはプログラムの安全装置
ここまで、Pythonの raise 文を使って意図的に例外を発生させる方法とその使いどころを見てきました。
一見、「わざわざエラーを起こすなんて変じゃない?」と思われるかもしれませんが、実はその逆。「ここで止めておいたほうが安全」と判断して、あえてプログラムを止めることが、安定したコードを書くためにはとても大切なんです。
💡raiseを使うことで得られるメリット
- エラーの原因を早期に発見できる
- 問題のあるデータや条件を見逃さずに対処できる
- 後続の処理に余計な負担をかけず、安全にプログラムを終了できる
- 自作の例外を使えば、エラーの種類ごとに明確な対応が可能になる
✅プログラムは「エラーとどう向き合うか」が肝心
Pythonを使ってアプリを作ったり、データ処理をしたりする中で、すべてが理想通りに動くとは限りません。
むしろ、何かしらのミスや想定外のデータに遭遇するのが普通です。
だからこそ、「ここで止めるべき」「これはおかしい」という判断をプログラマー自身がコードの中に仕込んでおくことが大切。そのための手段が、まさに raise 文なのです。

この記事を通じて、raise を上手に使うことで、予期せぬバグの発生を防ぎ、安心して使えるプログラムに近づけることがわかったかと思います。
今後は、ちょっとでも「このまま進んだらまずいかも?」と思ったときは、raise を使ってみてくださいね!
あわせて読みたい
Pythonの例外処理やエラーハンドリングをさらに深く理解したい方に、以下の記事もおすすめです。
- 🔍【Python入門】トレースバック(traceback)の読み方と活用法|
エラーメッセージの読み方が分かれば、デバッグ力が一気にアップ! - 🧠 【Python入門】デコレーターの使い方と仕組みを初心者向けにやさしく解説!
エラー発生前後の処理を仕込むなら、デコレーターと組み合わせるのも便利です。
よくある質問(Q&A)
- Q
raiseとassertの違いって何ですか? - A
assertは主にデバッグ用に使う構文で、「この条件が満たされていなければ例外を発生させる」ための簡易チェックです。一方、raiseは明確な意図を持って例外を発生させるので、通常の処理中でも安心して使えます。
- Q
raise文にメッセージを付けたほうがいい理由は? - A
メッセージを付けることで、エラーの内容や原因が明確になり、あとでコードを読む人(自分含む)にとって非常に助かります。 デバッグ時やログ確認のときにも情報として役立ちます。
- Q自作例外はどんなときに使うべき?
- A
システムが大きくなると、例外の発生場所や種類ごとに分けて管理したくなります。そのときに自作例外を使うと、特定の層や処理だけに反応するような細かい制御ができて便利です。







※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。
※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。