Pythonの例外処理をやさしく解説!初心者でもわかるtry-exceptの基本と使い方
生徒
「Pythonでプログラムが途中で止まらないようにする方法ってありますか?何か間違うとすぐに赤いエラー画面になってしまうんです。」
先生
「Pythonでは、例外処理という仕組みを使うことで、エラーが起きてもプログラム全体が止まらないようにできます。特に初心者がつまずきやすい部分なので、今日はゆっくり解説していきますね。」
生徒
「例外処理って何ですか?難しそうな名前ですけど、どういうときに使うものなんですか?」
先生
「例外処理というのは、プログラムの途中で問題が起きたときに、その問題をキャッチして代わりの処理に切り替える仕組みのことです。Pythonではtry-exceptという文法を使います。まずは基本から見ていきましょう。」
1. Pythonの例外処理(try-except)とは?仕組みをわかりやすく解説
Pythonの例外処理とは、プログラムの実行中に発生する「予期せぬエラー(例外)」を事前に想定し、プログラムが強制終了しないように制御する仕組みのことです。通常、Pythonはコードを上から順に実行しますが、途中で計算ミスや読み込みミスが発生すると、その瞬間に動作が止まり、不親切なエラーメッセージが表示されてしまいます。
これを防ぐのが例外処理の役割です。プログラミング未経験の方でもイメージしやすいよう、身近な例で考えてみましょう。
150円の飲み物を買おうとしたとき、100円玉を入れるつもりが間違えて「ボタン電池」を入れてしまったとします。もしこの自販機に例外処理がなければ、機械は混乱してフリーズし、二度とお釣りも出せなくなるかもしれません。
しかし、実際の自販機は「これはお金ではありません」とエラーを検知し、それを返却口に戻して、そのまま次の操作を受け付けてくれます。これが、プログラムにおける「エラーをキャッチして安全に処理を続ける」という考え方です。
より具体的に、Pythonで「数値以外が入力された場合」の簡単な挙動を比較してみましょう。
# 例外処理がない場合:文字を入力するとエラーで強制終了する
age = int(input("年齢を数字で入力してください: "))
print(f"{age}歳ですね、承知いたしました。")
上記のコードでは、ユーザーが「二十歳」と漢字で入力した瞬間、プログラムはエラーを吐いて止まってしまいます。これをtry-exceptで囲むことで、「エラーが起きたら『数字で入れてね』と優しく教えてあげる」という親切なプログラムに作り変えることができるのです。
例外処理をマスターすることは、ユーザーにとって使いやすく、かつ「壊れにくい」信頼性の高いシステムを作るための第一歩となります。
2. try-exceptの基本的な書き方と構文ルール
Pythonで例外処理を行うための最も基本的で強力なツールが「try-except文」です。書き方は非常にシンプルで、エラーが起きそうな場所をあらかじめ予測して、あみだくじのように処理を分岐させるイメージで記述します。
- tryブロック: 「まずはこれをやってみて!」という本来の処理を書く。
- exceptブロック: 「もしエラーが出たら、こっちの処理に切り替えて!」という予備の動きを書く。
プログラミング未経験の方でも直感的に理解できるよう、具体的なサンプルコードで見てみましょう。今回は「入力した文字を数字に変換する」という、エラーが起きやすい処理を例にします。
try:
# ユーザーに入力を促す(ここで「あ」などの文字を入れるとエラー予備軍に!)
val = input("あなたのラッキーナンバー(数字)を入力してください:")
number = int(val)
print(f"あなたの番号は {number} ですね!")
except ValueError:
# 数字以外が入力されて「ValueError」が出た時だけ、ここが実行される
print("エラー:数字以外の文字が入力されました。半角数字で入力してください。")
このプログラムを実行した際、正しく「7」と入力すれば try の中身が最後まで実行されます。しかし、「ラッキー」などの文字列を入力してしまうと、通常はプログラムが強制終了(クラッシュ)してしまいます。
そこで except ValueError: の出番です。この一文があるおかげで、Pythonは「あ、これは想定内のミスだね」と判断し、プログラムを止めずに優しいエラーメッセージを表示して、安全に処理を続行することができるのです。
3. よくある例外の種類と初心者が注意すべきポイント
Pythonには多くの「例外(エラーの種類)」が定義されていますが、初心者が最初に出会うエラーはだいたい決まっています。これらを事前に知っておくと、デバッグ(間違い探し)のスピードが格段に上がります。
代表的な3つの例外を、具体的なシチュエーションと一緒に見てみましょう。
| エラー名(例外名) | どんな時に起こる? | よくある原因 |
|---|---|---|
| ZeroDivisionError | 0で割り算をした | 計算式の分母が0になってしまった |
| ValueError | 値が不適切 | 数字を入れる場所に文字を入力した |
| IndexError | リストの範囲外を指定 | 3つしかないデータに5番目を求めた |
例えば、算数のテストをプログラムで作ったとします。ユーザーがうっかり「0」で割るような入力をしても、プログラムがパニックにならないように守ってあげるのがプログラマの優しさです。
try:
# 割り算のシミュレーション
bunshi = 10
bunbo = 0 # もしユーザーが0を入力したら...
result = bunshi / bunbo
print(f"答えは {result} です")
except ZeroDivisionError:
# 0で割った時専用のメッセージを表示
print("【エラー通知】数字を0で割ることは数学的にできません。別の数字を試してください。")
このように、「どんな失敗が起きそうか」を予測して、そのエラー名(ZeroDivisionErrorなど)をピンポイントで指定するのがコツです。闇雲にエラーを隠すのではなく、何が原因で止まりそうになったのかを、ユーザーや自分自身に分かりやすく伝えてあげることが、脱・初心者の第一歩になります。
4. exceptを複数使うこともできる
プログラムの内容によっては、発生しうるエラーが複数ある場合があります。そのようなときはexceptを複数書くことで、それぞれのエラーごとに違う処理を行うことができます。
try:
file = open("test.txt", "r")
number = int(file.read())
except FileNotFoundError:
print("ファイルが見つかりませんでした。")
except ValueError:
print("ファイルの中身を数字として読み込めませんでした。")
このように、問題の種類に応じて適切な案内を表示できるようになります。実際のシステム開発では、どのようなエラーが起こりうるかを想定し、丁寧に例外を分けることで安全なプログラムを作ります。
5. finallyを使えば必ず実行される処理も書ける
finallyというキーワードを使うことで、エラーが起こっても起こらなくても必ず実行したい処理を書くことができます。たとえば、ファイルを開いたら必ず閉じたい場合や、接続したネットワークを確実に切断したい場合などに使われます。
try:
file = open("sample.txt", "r")
data = file.read()
print(data)
except FileNotFoundError:
print("ファイルが存在しません。")
finally:
print("処理が完了しました。")
この仕組みを覚えておくと、プログラムの後片付けが確実にできるようになります。
6. 初心者が知っておくと便利なtry-exceptの応用
例外処理は、使い方によってプログラムの安全性を大きく向上させることができます。たとえば、ユーザー入力のチェック、ファイル読み書き、ネットワーク通信など、失敗する可能性のある操作には必ず例外処理を組み込む習慣をつけましょう。
また、例外処理は「プログラムが間違っている部分を隠すためではなく、安全に案内を出すための仕組み」という考え方も重要です。過剰にtry-exceptを使うと逆に不具合が見えなくなることがあるため、どこに使うべきかを考える力も少しずつ身につけていきましょう。
まとめ
Pythonの例外処理は、初心者がつまずきやすいエラーへの理解を深めながら、安全にプログラムを動かすための重要な仕組みです。とくにtry-exceptは、入力チェックやファイル操作など失敗の起こりやすい処理に欠かせない構文として広く使われています。例外処理を自然に使えるようになると、プログラム全体の安定性が高まり、複雑な処理にも柔軟に対応できるようになります。とくにエラーの種類ごとにexceptを分ける方法や、finallyで後片付けを確実に行う設計は、実務でも常に活用される考え方です。さらに、例外処理を適切に配置することで、ファイル読み込み・ユーザー入力・ネットワーク通信など、あらゆる場面で「思いどおりに動かないときの対処」ができるようになり、プログラムの品質が大きく向上します。
また、例外処理は単にエラーを回避するだけでなく、「ユーザーにわかりやすいメッセージを返す」ための大切な機能でもあります。PythonではValueError、ZeroDivisionError、FileNotFoundErrorなどさまざまな例外が用意されているため、起きた問題の種類に応じて適切な案内を行うことができます。たとえば、数字入力を求める画面では「数値ではありません」と伝え、ファイルが見つからないときには「ファイルが存在しません」と知らせることで、ユーザー体験が大きく向上します。こうした細やかな配慮を実現するのが例外処理の魅力のひとつです。
最後に、例外処理の基本的な構造をしっかり理解しておくことが、エラーに強いPythonコードを書く第一歩となります。tryブロックでは「試して実行する処理」、exceptブロックでは「問題が起きた場合の対応」、そしてfinallyでは「エラーの有無にかかわらず行う後処理」を記述します。この三つの役割を整理すると、プログラムの見通しが非常によくなり、初心者にありがちな「何が原因で止まったのかわからない」という状態も避けやすくなります。例外処理はPython学習の基礎でありながら、応用力が問われる奥深い機能なので、実際に手を動かしながら少しずつ慣れていくことが大切です。
サンプルプログラムで例外処理の流れを確認
def load_number_from_file(path):
try:
f = open(path, "r")
data = f.read()
value = int(data)
print("読み込んだ数値:", value)
except FileNotFoundError:
print("指定されたファイルが見つかりませんでした。")
except ValueError:
print("ファイルの中の値を数字として変換できませんでした。")
finally:
print("読み込み処理を終了します。")
このサンプルでは、ファイルが存在しない場合と、中身が数字ではない場合を分けて処理しています。初心者でも理解しやすいように構造が整理されており、例外がどのようにキャッチされ、どの処理が必ず実行されるのかをはっきり確認できます。try-except-finallyの流れを繰り返し読むことで、Pythonの例外処理に対する理解が深まり、より実践的なコード設計につながります。
先生
「今日の勉強では、例外処理の基本から応用までしっかり整理できましたね。try-exceptの流れがつかめると、プログラムが一気に安定しますよ。」
生徒
「はい!特に、どんなエラーが起きるかを考えてexceptを分けることで、プログラムがすごく読みやすくなると感じました。finallyの使い方も便利ですね。」
先生
「その調子です。例外処理は理解すればするほど使いやすくなるので、今日学んだ内容をいろいろな場面で試してみてください。」
生徒
「はい!エラーに強いPythonプログラムを書けるように、これからも頑張ります!」