Pythonの例外処理(try-except)の基本と応用!エラーハンドリングをマスターしよう
生徒
「Pythonでエラーが出たときに、プログラムが止まらないようにする方法ってありますか?」
先生
「はい、Pythonではtry-exceptという構文を使って、エラーが起きてもプログラムを止めずに処理を続けることができます。」
生徒
「try-exceptって、どうやって書くんですか?初心者でも使えますか?」
先生
「もちろんです!とても簡単なので、まずは基本の使い方から見ていきましょう。」
1. Pythonの例外処理とは?
Python(パイソン)でプログラムを実行していると、思わぬ「エラー(間違い)」が起こることがあります。たとえば、存在しないファイルを開こうとしたり、数字ではない文字を計算しようとしたときです。
こうしたエラーが起きたときに、プログラムが途中で止まってしまうと困りますよね。そこで登場するのが「例外処理(れいがいしょり)」です。Pythonでは、tryとexceptを使ってエラーを処理し、プログラムの続きを安全に実行することができます。
2. try-exceptの基本的な使い方
それでは、try-except構文(こうぶん)の基本を見てみましょう。構文とは、プログラムの文法のことです。以下は簡単な例です。
try:
number = int(input("数字を入力してください: "))
print("あなたが入力した数字は", number)
except:
print("エラーが発生しました。数字を入力してください。")
このコードでは、ユーザーが入力した値を数字(整数)に変換しようとします。しかし、もし文字や記号など数字以外を入力するとエラーになります。その場合でも、exceptブロックが実行されて、エラーメッセージが表示されるだけで、プログラムは止まりません。
3. よくあるエラーを特定して処理する
exceptのあとに何も書かない場合、すべてのエラーをまとめて処理します。でも、エラーの種類によって、違う対応をしたいときもあります。
その場合は、エラーの種類(例外クラス)を指定します。例えば、ValueErrorは「値のエラー」、ZeroDivisionErrorは「0で割ったときのエラー」です。
try:
a = int(input("割られる数を入力してください: "))
b = int(input("割る数を入力してください: "))
print(a / b)
except ValueError:
print("数字を入力してください。")
except ZeroDivisionError:
print("0では割れません。")
4. finallyを使って最後に必ず実行する処理を書く
try-exceptには、finallyという構文もあります。これは、エラーがあってもなくても、最後に必ず実行される処理を指定できます。
たとえば、ファイルを開いて処理をしたあと、必ずファイルを閉じたいときなどに使います。
try:
f = open("example.txt", "r")
content = f.read()
print(content)
except FileNotFoundError:
print("ファイルが見つかりません。")
finally:
print("処理が終了しました。")
5. elseを使ってエラーがなかったときだけ実行する
tryの中の処理がエラーなく成功したときだけ、elseを使って別の処理を実行することもできます。
try:
number = int(input("年齢を入力してください: "))
except ValueError:
print("数値を入力してください。")
else:
print("あなたの年齢は", number, "歳です。")
このようにelseは「エラーが起きなかったとき限定で実行する処理」を書く場所です。
6. 複数のexceptを組み合わせて使う
Pythonでは、exceptをいくつでも書くことができます。これにより、いろいろなエラーに合わせて違うメッセージや処理を用意できます。
try:
x = int(input("数値を入力してください: "))
y = 10 / x
except ValueError:
print("無効な数値が入力されました。")
except ZeroDivisionError:
print("0では割り算できません。")
except Exception as e:
print("予期しないエラーが発生しました:", e)
Exception as eのように書くと、発生したエラーの内容を変数eに入れて表示できます。
7. エラー処理を使うとプログラムが強くなる
try-except構文を使うことで、エラーが起きてもプログラムが止まらず、ユーザーにわかりやすいメッセージを表示できるようになります。これは、ユーザーフレンドリー(使う人にやさしい)なアプリやツールを作るためにとても重要です。
また、処理を分けることで、バグ(プログラムの間違い)の発見もしやすくなります。プログラムの安全性や信頼性を上げるために、try-exceptはぜひ覚えておきましょう。
まとめ
Pythonの例外処理であるtry-except構文は、プログラムの実行中に発生するエラーを安全に処理し、処理を途中で止めないために欠かせない基本機能です。初心者がPythonを学習する過程では、入力ミスや計算ミス、ファイル操作の失敗など、さまざまなエラーに直面しますが、例外処理を正しく理解して使えるようになることで、プログラム全体の安定性と信頼性が大きく向上します。 tryブロックには「エラーが起きる可能性のある処理」をまとめて書き、exceptブロックでは「エラーが起きたときの対応」を記述します。この構造により、エラーが発生してもプログラムが強制終了せず、ユーザーにとって分かりやすいメッセージを表示できるようになります。特にValueErrorやZeroDivisionError、FileNotFoundErrorなど、Pythonで頻繁に発生する例外を個別に処理できる点は、実践的なプログラミングにおいて非常に重要です。 また、finallyを使えば、エラーの有無に関係なく必ず実行したい処理を記述できるため、ファイルの後始末や終了メッセージの表示など、安全なプログラム設計が可能になります。else構文を活用することで、エラーが発生しなかった場合のみ処理を実行でき、コードの可読性や意図も明確になります。複数のexceptを組み合わせることで、想定されるエラーごとに適切な対処を用意できるため、ユーザー操作を前提としたアプリケーションやツール作成にも応用できます。 Pythonのエラーハンドリングを身につけることは、単にエラーを防ぐだけでなく、「想定外の入力や状況に耐えられる強いプログラム」を作る力を養うことにつながります。try-except構文は、Python初心者から中級者へとステップアップするための重要な知識であり、今後の学習や実務でも必ず役立つ基礎技術です。
サンプルプログラムで振り返る例外処理
def calculate_division():
try:
x = int(input("割られる数を入力してください: "))
y = int(input("割る数を入力してください: "))
result = x / y
except ValueError:
print("数値を正しく入力してください。")
except ZeroDivisionError:
print("0で割ることはできません。")
else:
print("計算結果は", result, "です。")
finally:
print("計算処理を終了します。")
このサンプルでは、try-except・else・finallyをすべて組み合わせて使用しています。入力値が正しい場合は計算結果が表示され、入力ミスや0による割り算が行われた場合でも、プログラムは止まらずに適切なメッセージを表示します。最後に必ず終了メッセージが表示されるため、処理の流れも分かりやすくなっています。このような構成は、実際のPythonプログラミングでもよく使われる実践的な例外処理の形です。
生徒
「try-exceptを使うと、エラーが出てもプログラムが止まらない理由がよく分かりました。」
先生
「それは大切なポイントですね。エラーが起きる前提で考えることが、良いプログラムを作る第一歩です。」
生徒
「ValueErrorやZeroDivisionErrorを分けて書けるのも便利だと思いました。ユーザーにも親切ですね。」
先生
「その通りです。例外ごとに対応を変えることで、より分かりやすく安全な処理ができます。」
生徒
「finallyやelseの使い方も理解できました。処理の流れが整理されて読みやすくなりますね。」
先生
「よく理解できています。try-exceptを使いこなせるようになると、Pythonプログラミングが一段と楽になりますよ。」