Pythonのtry-except-else-finallyの使い方!例外処理の詳細な制御を解説
生徒
「Pythonでエラーが出たときにプログラムを止めずに処理を続ける方法ってあるんですか?」
先生
「ありますよ。Pythonではtryとexceptを使って、エラー(例外)が起きても安全に処理を続けることができます。」
生徒
「それって難しいんですか?初心者でも使えるようになりますか?」
先生
「もちろんです。実生活の例を交えながら、try、except、else、finallyの使い方をわかりやすく説明していきますね。」
1. 例外処理(えいがいしょり)ってなに?
Pythonでは、プログラムの途中で「エラー(例外)」が発生することがあります。たとえば、0で割り算しようとしたり、存在しないファイルを開こうとしたりする場合です。通常、こうしたエラーがあるとプログラムは止まってしまいます。
でも、現実の生活を想像してみてください。自動販売機にお金を入れて、ボタンを押したのにジュースが出てこないことがありますよね。そんなときでも、「おつりを返す」などの対処がされます。それが「例外処理」です。
Pythonでも、tryとexceptを使えば、エラーが出たときの対応を自分で決めることができます。
2. try-exceptの基本的な使い方
tryブロックには「試しに実行するコード」、exceptブロックには「エラーが出たときの処理」を書きます。
try:
x = 10 / 0
except ZeroDivisionError:
print("0で割ることはできません。")
上のコードでは、0で割る処理を試しています。普通ならエラーで止まりますが、exceptで対応することで、エラーメッセージを出すだけでプログラムは止まりません。
3. elseを使ってエラーがなかったときの処理を書く
elseブロックは、tryの中でエラーが発生しなかったときにだけ実行されます。
try:
num = int(input("数字を入力してください: "))
except ValueError:
print("数字以外が入力されました。")
else:
print("入力された数字は", num, "です。")
たとえば上のコードでは、ユーザーの入力が数字でなかったらexceptが動きますが、数字だった場合はelseの中の処理が行われます。
4. finallyで最後に必ず行う処理を書く
finallyブロックは、エラーが起きても起きなくても、最後に必ず実行される処理を書くための場所です。
try:
f = open("test.txt", "r")
data = f.read()
except FileNotFoundError:
print("ファイルが見つかりません。")
else:
print("ファイルの内容を読み込みました。")
finally:
print("処理が終了しました。")
このように、ファイルの読み込みが成功してもしなくても、「処理が終了しました。」は必ず表示されます。
5. try-except-else-finallyの全体構成を整理しよう
4つのブロックをすべて使った構成は以下のようになります。必要に応じて、elseやfinallyは省略することもできます。
try:
# エラーが起きそうな処理
pass
except エラーの種類:
# エラーが起きたときの処理
pass
else:
# エラーが起きなかったときの処理
pass
finally:
# 最後に必ず行いたい処理
pass
どのブロックもインデント(字下げ)をそろえて書くことが大切です。
6. 複数の例外に対応するには?
exceptを複数使えば、異なる種類のエラーに対して別々の対応が可能です。
try:
value = int("abc")
result = 10 / value
except ValueError:
print("数値に変換できません。")
except ZeroDivisionError:
print("0では割れません。")
このようにして、場面ごとに適した対応ができます。
7. 実生活の例でさらに理解しよう
たとえば、「炊飯器でご飯を炊く」と考えてみましょう。
try:ご飯を炊く処理(炊飯ボタンを押す)except:水が入ってなかったときの警告else:正常に炊けたときは「炊き上がりました」と表示finally:炊飯器の電源をオフにする
このように、try~finallyは、実生活の「失敗が起きるかもしれないけど、ちゃんと対処する流れ」と同じなんです。
8. 例外処理を使うメリットとは?
例外処理を使うと、プログラムが途中で止まらずに最後まで動くようになります。また、ユーザーに「なぜ失敗したのか」を伝えることができ、使いやすいアプリケーションになります。
初心者でも、try、except、else、finallyを組み合わせて、しっかりとしたエラーハンドリング(エラー処理)を行えるようになります。
まとめ
今回の記事では、Pythonにおける例外処理の中でも、try・except・else・finallyを組み合わせた書き方について詳しく学びました。Pythonのプログラムは、計算処理やファイル操作、ユーザー入力など、さまざまな場面でエラーが発生する可能性があります。そうしたエラーを想定せずにコードを書くと、少しのミスでプログラム全体が停止してしまい、利用する側にとっても分かりにくく、不親切な動作になってしまいます。 try-except構文を使うことで、「エラーが起きるかもしれない処理」と「エラーが起きたときの対応」を明確に分けて書くことができ、プログラムの安全性と読みやすさが大きく向上します。さらに、elseを使えば「エラーが発生しなかった場合だけ実行したい処理」を整理して書くことができ、処理の意図がより分かりやすくなります。そしてfinallyは、エラーの有無に関係なく必ず実行されるため、後片付けや終了処理、ログ出力などに最適です。 try-except-else-finallyを正しく使い分けられるようになると、Pythonプログラミングの設計力が一段階上がります。単にエラーを防ぐのではなく、「エラーが起きる前提でどう動かすか」を考えられるようになり、実務でも通用する考え方が身につきます。特に、ValueError、ZeroDivisionError、FileNotFoundErrorなど、Pythonで頻出する例外を理解しておくことは、初心者から中級者へステップアップするうえで欠かせません。 また、複数のexceptを使い分けることで、状況ごとに異なるメッセージを表示できるようになり、ユーザーにとっても親切なプログラムになります。例外処理は「難しいもの」ではなく、「安心してプログラムを動かすための保険」のような存在だと考えると理解しやすいでしょう。今回学んだtry-except-else-finallyの構造をしっかり身につけておくことで、今後のPython学習やアプリケーション開発がよりスムーズになります。
サンプルプログラムで復習しよう
def input_and_divide():
try:
a = int(input("割られる数を入力してください: "))
b = int(input("割る数を入力してください: "))
result = a / b
except ValueError:
print("数値を正しく入力してください。")
except ZeroDivisionError:
print("0で割ることはできません。")
else:
print("計算結果は", result, "です。")
finally:
print("処理を終了します。")
このサンプルプログラムでは、tryの中で入力と計算を行い、exceptで入力ミスや0による割り算を個別に処理しています。エラーがなかった場合のみelseが実行され、最後にfinallyで必ず終了メッセージが表示されます。このような構成は、Pythonの例外処理の基本形として非常に重要で、実際の開発現場でもよく使われます。
生徒
「tryとexceptだけじゃなくて、elseやfinallyまで使うと、処理の流れがすごく分かりやすくなりますね。」
先生
「そうですね。エラーが起きた場合と起きなかった場合をはっきり分けて書けるのが大きなポイントです。」
生徒
「finallyは必ず実行されるから、後片付けや終了処理に向いているっていうのも理解できました。」
先生
「その理解はとても大切です。ファイル操作や通信処理では、finallyがあるかどうかで安全性が大きく変わります。」
生徒
「例外処理って、エラーを隠すためじゃなくて、ちゃんと対処するための仕組みなんですね。」
先生
「その通りです。try-except-else-finallyを使いこなせるようになると、Pythonプログラミングが一気に実践的になりますよ。」