Pythonのtry-except-else-finallyの使い方!例外処理の細かい制御
生徒
「Pythonでプログラムを書いているときに、急にエラーが出て止まっちゃうんですが、どうしたらいいんですか?」
先生
「それは“例外”と呼ばれるエラーの一種ですね。Pythonではtry-exceptという構文を使って、エラーが出てもプログラムを止めずに処理を続けることができますよ。」
生徒
「try-exceptは聞いたことがあるかも!でも、elseとかfinallyってのも見たことがあって、混乱してます…」
先生
「では今回は、try-except-else-finallyを使った例外処理の方法について、わかりやすく説明していきましょう!」
1. 例外処理とは?初心者にもわかる基本の考え方
まず「例外処理(れいがいしょり)」という言葉から説明しましょう。例外とは、プログラムを実行している途中で“予想していなかったエラー”が発生することです。
たとえば、0で割り算をしてしまったり、存在しないファイルを開こうとしたときなどにエラーが起こります。こうしたエラーに対応するために使うのが、try-exceptという構文です。
2. try-except文の基本構文
まずは、try-exceptの基本的な使い方を見てみましょう。tryブロックの中に“エラーが起きそうな処理”を書いて、もしエラーが出たらexceptブロックの中の処理に移ります。
try:
num = int(input("数字を入力してください: "))
print("入力した数字:", num)
except ValueError:
print("数字ではない文字が入力されました!")
この例では、input()で入力された文字が数字でなければ、ValueErrorというエラーが発生し、exceptの処理が実行されます。
3. elseで正常に終わったときの処理を追加
tryブロックの中でエラーが出なかったときにだけ、elseブロックが実行されます。
たとえば、ユーザーが正しく数字を入力した場合だけ、さらに別の処理をしたいときに使えます。
try:
num = int(input("年齢を入力してください: "))
except ValueError:
print("数字を入力してください。")
else:
print("あなたは", num, "歳ですね!")
exceptが実行されるとelseはスキップされ、逆にtryが成功するとelseが動くという流れです。
4. finallyで必ず実行したい処理を書く
finallyブロックは、エラーがあってもなくても、必ず最後に実行されます。
たとえば「ファイルを閉じる」「接続を切る」など、必ずやっておきたい処理に使います。
try:
f = open("sample.txt", "r")
data = f.read()
except FileNotFoundError:
print("ファイルが見つかりませんでした。")
else:
print("ファイルの中身:")
print(data)
finally:
print("処理を終了します。")
このように、finallyはどんな場合でも実行されるため、「後片付け」をするのに適しています。
5. exceptを複数使って細かくエラーを分けよう
exceptは複数書くことができて、どの種類のエラーが起きたのかによって違う処理をすることができます。
try:
a = int(input("割られる数を入力: "))
b = int(input("割る数を入力: "))
result = a / b
except ValueError:
print("数字を入力してください。")
except ZeroDivisionError:
print("0では割り算できません。")
else:
print("計算結果:", result)
ValueErrorは「数字じゃない値」が入力されたとき、ZeroDivisionErrorは「0で割ったとき」に起こるエラーです。
6. 例外処理を使うときのポイントと注意点
例外処理はとても便利ですが、なんでもtry-exceptで囲めばいいというわけではありません。次のような点に注意しましょう。
- 何のエラーを想定しているのか、
exceptで具体的に書く(Exceptionだけだと広すぎる) - エラーが起きても、プログラムが動き続けてよいか考える
- デバッグ(不具合調査)のときに、例外を握りつぶすと原因が分かりにくくなる
7. 例外処理のよくある使い道と初心者向けの活用例
プログラミング初心者が例外処理を使う場面としては、次のようなケースがあります。
- ユーザーからの入力をチェック(数字かどうか)
- ファイルの読み書き時に、ファイルが存在するか確認
- ネットワーク通信やデータベース接続時に、接続エラーへの対応
これらは初心者でも遭遇しやすいエラーですので、try-exceptの使い方を早めに覚えておくと安心です。
8. try-except-finallyだけでも十分に実用的
elseはなくても問題ありません。try-except-finallyだけでも、多くのケースで十分に対応できます。
プログラムの処理の流れに応じて、必要なときだけelseを追加すればOKです。
まとめ
try-except-else-finallyで学んだ例外処理の全体像
今回の記事では、Pythonにおける例外処理の基本から応用までを、try、except、else、finallyという構文を通して学んできました。 プログラムは思い通りに動くこともあれば、入力ミスや環境の違い、ファイルの有無などによって予期しないエラーが発生することもあります。 そうした状況に対応するために、例外処理はPythonプログラミングにおいて欠かせない考え方です。 tryブロックではエラーが起こる可能性のある処理をまとめて書き、exceptでは発生したエラーの種類に応じた対応を行います。 さらにelseを使えば、エラーが起きなかった場合だけ実行したい処理を安全に分けることができ、 finallyを使えば、エラーの有無に関係なく必ず実行したい後処理を書くことができます。 これにより、プログラムの流れが整理され、読みやすく、保守しやすいコードを書くことが可能になります。
例外処理を使うことで得られる安心感と実用性
例外処理を正しく使うことで、プログラムは途中で突然止まることが少なくなり、利用者にとっても安心して使える仕組みになります。 特に初心者が作る入力処理やファイル操作では、想定外の値が入ることは日常的に起こります。 try-exceptを使ってエラーを想定した設計を行うことで、エラーメッセージを分かりやすく表示したり、 次の処理へ安全につなげたりすることができます。 また、exceptを複数使うことで、どの種類のエラーが発生したのかを細かく判断できるため、 より丁寧で信頼性の高いプログラムへと成長させることができます。 Pythonの例外処理は文法も比較的シンプルなので、早い段階で慣れておくことが大切です。
まとめとしてのサンプルプログラム
try:
score = int(input("点数を入力してください: "))
except ValueError:
print("数字で入力してください。")
else:
if score >= 60:
print("合格です。")
else:
print("不合格です。")
finally:
print("判定処理を終了します。")
このサンプルでは、入力値が数字であるかを確認し、正しく入力された場合のみ合否判定を行っています。 そして最後にfinallyで必ず終了メッセージを表示することで、処理の区切りが明確になります。 このような構成は、実際の学習用プログラムや簡単な業務ツールでもそのまま活用できます。
生徒「try-exceptって、ただエラーを防ぐだけじゃなくて、プログラムを読みやすくする意味もあるんですね。」
先生「その通りです。エラーが起きたときの流れを整理できるので、後から見返したときにも理解しやすくなります。」
生徒「elseやfinallyも使い分けることで、処理の役割がはっきりしますね。」
先生「ええ。特にfinallyは、ファイル操作や終了処理などで必ず役に立ちます。」
生徒「これからはエラーが出ても怖がらずに、例外処理を書いて対処できそうです。」
先生「その意識が大切です。例外処理を理解すれば、Pythonプログラミングの幅が一気に広がりますよ。」