Pythonの例外処理(try-except)の基本と応用!エラーハンドリング完全ガイド
生徒
「Pythonのプログラムを書いていたら、突然『エラー』って出て止まっちゃいました…どうすればいいんですか?」
先生
「それは『例外(エラー)』が発生したからですね。Pythonでは『try-except』という仕組みを使って、エラーが出ても止まらないようにできますよ。」
生徒
「try-exceptって、どう使えばいいんですか?初心者でも使えるように教えてください!」
先生
「もちろんです!まずは基本から一緒に見ていきましょう。」
1. Pythonの例外処理とは?
Pythonの例外処理とは、プログラムの途中で起きる思わぬエラー(例外)を、安全に受け止めて処理を続けるための仕組みです。例外は、プログラムを書いていると必ず出会うもので、初心者ほど「突然止まってしまう経験」をしやすい部分でもあります。
たとえば、0で割り算をしたり、存在しないファイルを開こうとしたりすると、Pythonは正しく処理できずエラーを出します。こうした予期せぬ出来事を放置するとプログラムが止まってしまうため、try-exceptを使って「エラーが起きたときの対応」をあらかじめ用意しておくのです。
次のような簡単な例を見ると、例外処理の雰囲気がつかみやすいでしょう。
try:
value = 10 / 0 # 本来はエラーになる処理
print(value)
except:
print("エラーが発生しましたが、プログラムは止まりません。")
エラーが発生しましたが、プログラムは止まりません。
このように、例外処理を使うと「問題が起きても落ち着いて対応できる」プログラムになります。エラーを正しく扱うことは、初心者が安心してコードを書くための大切な一歩です。
2. try-exceptの基本の書き方
Pythonの例外処理の基本となるのがtry-except構文です。まず「この処理はエラーが起こるかもしれない」と思う部分をtryに書き、万が一エラーが発生した場合はexceptが受け止めてくれます。これにより、プログラム全体が止まることなく安全に続行できるようになります。
try:
# エラーが起きそうな処理
処理A
except:
# エラーが起きたときの処理
処理B
tryの中でエラーが発生すると、Pythonは自動的にexceptに処理を切り替えてくれます。とても直感的で、初心者でもすぐに使いこなせる仕組みです。
さらに理解しやすくするために、実際の例を見てみましょう。たとえば、ユーザーから数字を入力してもらう場面では、文字を入力されるとエラーが発生します。そのときの保険として例外処理を使います。
try:
num = int(input("数字を入力してください:"))
print("入力された数字は", num, "です。")
except:
print("数字ではない値が入力されました。もう一度試してください。")
(実行例)
数字を入力してください:abc
数字ではない値が入力されました。もう一度試してください。
このように、try-exceptがあるだけで「間違った入力をしてもプログラムが落ちない」という安心感が生まれます。初心者が安全にプログラミングを学ぶための、とても大切な基本要素です。
3. 実例:0で割ってしまうエラー(ZeroDivisionError)
Pythonでは、数学的に「0で割る」という操作は成り立たないため、実行するとZeroDivisionErrorというエラーが必ず発生します。初心者が最初につまずきやすい代表的な例外の一つであり、例外処理の必要性を理解するにはとても良い題材です。
まずは、0で割ろうとしてエラーを起こすシンプルな例をご覧ください。
try:
number = 10 / 0 # ここでエラーが発生する
print(number)
except ZeroDivisionError:
print("0では割り算できません!別の値を試してください。")
0では割り算できません!別の値を試してください。
このように、エラーそのものは避けられなくても、try-exceptを使うことでプログラムは止まらず、適切なメッセージを表示して処理を続けられます。特にユーザー入力を扱う場面では、「0を入力された場合にどうするか」を考えておくことが非常に重要です。
もう少しイメージが湧きやすいように、ユーザーに数字を入力してもらう実例も見てみましょう。
try:
num = int(input("割る数を入力してください:"))
result = 10 / num
print("結果:", result)
except ZeroDivisionError:
print("0では割り算できません。1以上の数字を入力してください。")
(実行例)
割る数を入力してください:0
0では割り算できません。1以上の数字を入力してください。
このように、例外処理を加えるだけで「エラーで止まるプログラム」が「親切で安全なプログラム」に変わります。ZeroDivisionErrorは最初に理解しておくと、その後の例外処理がぐっとわかりやすくなる代表的な例です。
4. 例外の種類を指定する方法
例外処理では、どんなエラーでもキャッチできますが、特定のエラーだけに対応したいときもあります。
その場合は、次のようにエラーの種類を指定します。
try:
value = int("文字列")
except ValueError:
print("数値に変換できませんでした。")
数値に変換できませんでした。
この例では、「文字列」を数値に変換しようとしてValueErrorが発生しています。
5. 複数の例外を処理したいとき
複数のエラーに対応するには、exceptを複数用意することができます。
try:
num = int(input("数字を入力してください:"))
result = 10 / num
print(result)
except ValueError:
print("入力された値が数字ではありません。")
except ZeroDivisionError:
print("0では割り算できません。")
このように、エラーの種類ごとに処理を変えられるので、より親切なメッセージを表示できます。
6. elseとfinallyの使い方
try-exceptには、elseやfinallyを組み合わせることができます。
- else:エラーが出なかったときに実行される
- finally:エラーがあってもなくても最後に必ず実行される
try:
num = int(input("数字を入力:"))
print(100 / num)
except ZeroDivisionError:
print("0で割ることはできません。")
else:
print("割り算が成功しました。")
finally:
print("処理が完了しました。")
(実行例)
数字を入力:10
10.0
割り算が成功しました。
処理が完了しました。
7. 応用例:ファイルを安全に開く
ファイルを開くときにも、例外処理はとても便利です。
try:
with open("sample.txt", "r") as file:
content = file.read()
print(content)
except FileNotFoundError:
print("ファイルが見つかりませんでした。")
このように、ファイルが存在しないときのエラーにも対応できます。
8. なぜ例外処理が大切なのか?
プログラムがエラーで止まってしまうと、ユーザーにとっても不便になります。
try-exceptを使うことで、安全で使いやすいプログラムが作れるようになります。
特に、入力を受け取るプログラムや、外部ファイル・ネットワークを扱うプログラムでは、例外処理がとても重要です。
9. Python初心者へのアドバイス
最初は例外処理に慣れないかもしれませんが、「エラーが出たらexceptにジャンプする」と考えるとイメージしやすいです。
「try → except → else → finally」の順番に処理が進む流れを頭に入れて、たくさん練習してみましょう。
初心者こそ、エラーに優しいコードを意識することが大切です。
まとめ
Pythonでの例外処理は、初めてプログラムを書き始めた人にとって特に重要な考え方になります。どんなに丁寧にコードを書いても、入力値が予想外だったり、外部ファイルが存在しなかったりといった事情から、思いがけないエラーが発生することがあります。こうした状況に対して、ただプログラムが停止してしまうのではなく、安全に処理を続けられるようにするために、try-exceptを中心とした例外処理の仕組みがあります。例外処理を理解することは、単なるエラー回避のためだけではなく、より信頼性の高いプログラムを作るための基礎でもあります。
tryブロックではエラーが発生しそうな処理を実行し、exceptブロックではそのエラーを受けて代わりの処理を行います。たとえば、ゼロで割り算しようとしてゼロ除算エラーになる場面、文字列を数値に変換しようとして変換エラーが起きる場面、存在しないファイルを開こうとしてファイル未検出エラーが発生する場面など、Pythonにはさまざまな例外が存在しています。これらの例外を種類ごとに処理できる仕組みは、プログラムが極端に複雑になるのを防ぎ、読みやすく丁寧なコードを書くための大きな助けとなります。また、エラーが起きなかったときだけ実行されるelse、エラーの有無に関わらず実行されるfinallyを組み合わせることで、処理の流れをより細かく制御できます。
とくにファイル操作やユーザー入力を扱うプログラムでは、例外処理は欠かせません。ファイルを開こうとして失敗したときに、ただプログラムが止まってしまうのではなく、「ファイルがありません」と知らせることができれば、利用者にとっても分かりやすい動作になります。こうした「やさしい動作」を実現する考え方こそが、例外処理のもっとも大切なポイントといえるでしょう。初心者がつまずきやすい「エラーが出てプログラムが止まる」という状況も、try-exceptを使えばなめらかに回避できます。
例外処理の確認ができるサンプルプログラム
# 数字の入力と割り算を安全に処理する例
try:
value = int(input("数字を入力してください: "))
answer = 100 / value
print("結果:", answer)
except ValueError:
print("数字以外が入力されました。数値を入力してください。")
except ZeroDivisionError:
print("零では割ることができません。")
else:
print("計算が無事に終了しました。")
finally:
print("処理を完了しました。")
このサンプルでは、ValueErrorとZeroDivisionErrorという二つの例外を指定し、それぞれに応じたエラーメッセージを表示しています。さらにelseで正常終了の処理を、finallyで後片付けを行う流れが整理されているため、例外処理の基本構造が自然に理解できる形になっています。実際に入力を変えて試すことで、どんなときにどのブロックが実行されるのかがよく分かり、try-exceptが動く順番を体で覚えることができます。
例外処理は、単にエラーを避ける機能ではなく、「プログラムが想定外の状況に遭遇したときにどう振る舞うか」を設計するための考え方でもあります。初心者のうちはひとつひとつの例外に戸惑うことも多いですが、慣れてくるとどの場面で try-except を使うべきか、どの例外をキャッチすべきか、自然と判断できるようになります。そして、例外処理を丁寧に書けるようになると、プログラム全体が落ち着いた動作をするようになり、ユーザーに安心を届けるコードへと近づいていきます。
生徒「今日のまとめで、try-except がどういうときに役に立つのかがよく分かりました!エラーが出ても止まらずに動くってすごく便利ですね。」
先生「そうだね。例外処理はプログラムの安全装置のようなもので、慣れればどんな場面でも自然と使えるようになるよ。入力やファイル操作のようにエラーが起きやすい場面ではとても効果的なんだ。」
生徒「else や finally も便利だと思いました。特に finally は必ず実行されるって聞いて、後片付けを入れるのにぴったりですね。」
先生「その通り。最後に必ず閉じたいファイルや、必ず実行したい処理があるときにとても役立つよ。例外処理は書けば書くほど理解が深まるので、色んなケースで試してみるといいね。」
生徒「今日はたくさん学べてよかったです!これならエラーが出ても怖くない気がします!」
先生「気持ちが前向きになったならそれが一番。これからも落ち着いて、丁寧なプログラムを書いていこうね。」