例外処理(try、except)

プログラム実行中にエラーが発生した場合、それを適切に処理するために例外処理を使用します。例外処理を行うことで、プログラムのクラッシュを防ぎ、エラーを適切に処理することができます。Pythonでは tryexcept ブロックを使って例外処理を行います。


基本的な例外処理

try ブロック内に例外が発生する可能性があるコードを記述し、except ブロック内に例外が発生した場合の処理を記述します。

try:
    # 例外が発生する可能性があるコード
    result = 10 / 0
except ZeroDivisionError:
    # 例外が発生した場合の処理
    print("ゼロによる除算エラーが発生しました")

この例では、ゼロによる除算が発生した場合に ZeroDivisionError をキャッチし、適切なエラーメッセージを表示しています。


複数の例外を処理する

複数の例外を処理する場合は、それぞれの except ブロックを追加します。

try:
    # 例外が発生する可能性があるコード
    value = int(input("整数を入力してください: "))
    result = 10 / value
except ValueError:
    # 値エラーが発生した場合の処理
    print("入力が整数ではありません")
except ZeroDivisionError:
    # ゼロによる除算エラーが発生した場合の処理
    print("ゼロによる除算エラーが発生しました")

この例では、ValueErrorZeroDivisionError の両方を処理しています。


例外の詳細情報を取得する

except ブロックで例外の詳細情報を取得するために、as キーワードを使って例外オブジェクトを取得することができます。

try:
    # 例外が発生する可能性があるコード
    result = 10 / 0
except ZeroDivisionError as e:
    # 例外が発生した場合の処理
    print(f"エラーが発生しました: {e}")

この例では、例外オブジェクト e を取得してエラーメッセージを表示しています。


elseブロック

try ブロック内のコードが例外を発生させなかった場合に実行される else ブロックを追加することができます。

try:
    # 例外が発生する可能性があるコード
    result = 10 / 2
except ZeroDivisionError:
    # 例外が発生した場合の処理
    print("ゼロによる除算エラーが発生しました")
else:
    # 例外が発生しなかった場合の処理
    print(f"計算結果: {result}")

この例では、例外が発生しなかった場合に計算結果を表示しています。


finallyブロック

finally ブロックは、例外の発生有無にかかわらず、常に実行されるコードを記述するために使用します。リソースのクリーンアップなどに役立ちます。

try:
    # 例外が発生する可能性があるコード
    file = open("example.txt", "r")
    content = file.read()
except FileNotFoundError:
    # 例外が発生した場合の処理
    print("ファイルが見つかりませんでした")
finally:
    # 常に実行されるコード
    file.close()
    print("ファイルを閉じました")

この例では、ファイルを開く試みを行い、ファイルが見つからない場合の処理を行い、最後にファイルを閉じる処理を finally ブロックで行っています。


ユーザー定義例外

独自の例外クラスを定義することで、特定の条件に対してカスタム例外を発生させることができます。ユーザー定義例外は、標準の例外クラスを継承して作成します。

class CustomError(Exception):
    """ユーザー定義例外"""
    pass

def check_value(value):
    if value < 0:
        raise CustomError("負の値は許可されていません")

try:
    check_value(-1)
except CustomError as e:
    print(f"カスタムエラーが発生しました: {e}")

この例では、負の値が渡された場合に CustomError を発生させ、その例外をキャッチして適切に処理しています。


まとめ

この章では、Pythonの例外処理について学びました。例外処理を使用することで、エラーが発生した場合に適切な対応を行い、プログラムの安定性を向上させることができます。次の章では、オブジェクト指向プログラミング(OOP)について学びます。クラスとオブジェクトを使って、より複雑なデータ構造とロジックを効果的に管理する方法を理解しましょう。