例外処理とは?プログラムのエラーを安全に処理するために
例外とエラーの違い
プログラムを実行するとき、予期しない事態によってプログラムが停止することがあります。これを「エラー」と呼びます。Pythonにはエラーを捕捉して適切に処理する仕組みがあり、これを「例外処理」といいます。
例外処理の目的
- プログラムの途中でエラーが発生しても、クラッシュしないようにする
- エラーメッセージを表示し、原因を特定しやすくする
- 必要に応じて代替処理を行い、プログラムを正常に動作させる
try-except構文の基本
try-exceptの基本構文
Pythonで例外を処理するためには、try
ブロックに通常のコードを記述し、except
ブロックにエラーが発生したときの処理を記述します。
構文:
try:
# エラーが発生する可能性のある処理
except エラーの種類:
# エラーが発生したときの処理
基本的な例
次の例では、0で割る操作を行い、エラーをキャッチしてメッセージを表示します:
try:
result = 10 / 0
except ZeroDivisionError:
print("0で割ることはできません。")
出力:
0で割ることはできません。
複数の例外を処理する方法
複数のexceptブロックを使う
1つのtry
ブロックに対して複数のexcept
ブロックを使い、異なるエラーに対して異なる処理を行うことができます。
例:
try:
value = int("abc")
result = 10 / 0
except ValueError:
print("無効な整数です。")
except ZeroDivisionError:
print("0で割ることはできません。")
出力:
無効な整数です。
すべての例外をまとめて処理する方法
どんなエラーでも共通の処理を行いたい場合は、except
の後に具体的なエラーの種類を指定せずに使うことができます。
例:
try:
value = int("abc")
except Exception as e:
print(f"エラーが発生しました: {e}")
出力:
エラーが発生しました: invalid literal for int() with base 10: 'abc'
elseブロックとfinallyブロックの使い方
elseブロックの概要
try
ブロック内の処理が正常に完了した場合にだけ実行される処理をelse
ブロックに記述します。
例:
try:
result = 10 / 2
except ZeroDivisionError:
print("0で割ることはできません。")
else:
print(f"計算結果: {result}")
出力:
計算結果: 5.0
finallyブロックの概要
finally
ブロックは、エラーの有無にかかわらず必ず実行されるコードを記述します。ファイルのクローズ処理や、リソースの開放などに使われます。
例:
try:
file = open("sample.txt", "r")
content = file.read()
except FileNotFoundError:
print("ファイルが見つかりません。")
finally:
print("処理が終了しました。")
出力:
ファイルが見つかりません。
処理が終了しました。
例外を自分で発生させる(raise文)
raise文の基本
特定の条件下で自分で例外を発生させるには、raise
文を使います。これにより、ユーザー定義のエラー処理が可能です。
例: 年齢が負の値の場合に例外を発生させる
def check_age(age):
if age < 0:
raise ValueError("年齢は負の値にはできません。")
print(f"あなたの年齢は {age} 歳です。")
try:
check_age(-5)
except ValueError as e:
print(f"エラー: {e}")
出力:
エラー: 年齢は負の値にはできません。
ユーザー定義の例外
独自の例外クラスを作成する
Pythonでは、独自の例外を作成することができます。Exception
クラスを継承して新しい例外クラスを作成し、特定の状況でエラーを発生させます。
例:
class CustomError(Exception):
pass
def check_value(value):
if value > 100:
raise CustomError("値が100を超えています。")
try:
check_value(150)
except CustomError as e:
print(f"カスタムエラーが発生しました: {e}")
出力:
カスタムエラーが発生しました: 値が100を超えています。
例外処理を活用した応用例
ファイル操作と例外処理
次のプログラムでは、ファイルを開く処理中にエラーが発生しても、必ずリソースが解放されるように例外処理を行っています。
例:
try:
with open("non_existent_file.txt", "r") as file:
content = file.read()
print(content)
except FileNotFoundError:
print("指定されたファイルが見つかりません。")
except PermissionError:
print("ファイルのアクセス権がありません。")
finally:
print("ファイル処理を終了しました。")
出力:
指定されたファイルが見つかりません。
ファイル処理を終了しました。
まとめと次のステップ
例外処理は、プログラムの安定性を高め、ユーザーに適切なエラーメッセージを表示するための重要な技術です。try-except構文、raise文、カスタム例外の作成などの基本を理解することで、予期しないエラーに対して柔軟に対応できるプログラムが書けるようになります。次のステップとして、例外処理を使った実際のプロジェクトに挑戦し、エラーが発生してもプログラムが正常に動作する仕組みを構築してみましょう!