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です。