PYTHON MEBY

Pythonでtry-except文による例外処理

この記事では、Pythonのtry-except文を使用して例外を処理する方法を説明します。様々な例外の種類、例外の捕捉方法、そして例外処理のベストプラクティスについて解説します。

目次

例外処理の基本

Pythonでは、try-except文を使用して例外を処理します。tryブロック内に例外が発生する可能性のあるコードを記述し、exceptブロックで例外を捕捉して処理します。

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

この例では、ZeroDivisionError例外が発生した場合にメッセージを表示します。

様々な例外の種類

Pythonでは、様々な種類の例外が定義されています。代表的な例外には、以下のようなものがあります。

  • ZeroDivisionError: ゼロ除算
  • TypeError: 型エラー
  • NameError: 名前エラー
  • FileNotFoundError: ファイルが見つからない
  • IndexError: インデックスエラー
  • ValueError: 値エラー

例外の捕捉と処理

複数のexceptブロックを使用して、異なる種類の例外を個別に処理できます。

try:
    file = open("nonexistent_file.txt", "r")
except FileNotFoundError:
    print("ファイルが見つかりません")
except Exception as e:
    print(f"予期せぬエラーが発生しました: {e}")

この例では、FileNotFoundErrorとその他の例外をそれぞれ異なる方法で処理しています。

特定の例外を捕捉せず、全ての例外を処理するには、except Exception as e: を使用します。eには例外オブジェクトが格納されます。

finallyブロック

finallyブロックは、例外が発生したかどうかに関係なく、必ず実行されるブロックです。ファイルのクローズやリソースの解放などに使用します。

try:
    file = open("test.txt", "w")
    file.write("Hello, world!")
except Exception as e:
    print(f"エラーが発生しました: {e}")
finally:
    file.close()

この例では、ファイルが正しく閉じられることを保証しています。

カスタム例外

独自の例外クラスを作成することもできます。

class MyCustomError(Exception):
    pass
try:
    raise MyCustomError("カスタムエラーが発生しました")
except MyCustomError as e:
    print(f"カスタムエラーが発生しました: {e}")

この例では、MyCustomErrorというカスタム例外クラスを作成し、それを発生させています。

例外処理のベストプラクティス

  • tryブロックには、例外が発生する可能性のあるコードのみを記述する
  • exceptブロックは、具体的な例外を捕捉するようにする
  • finallyブロックでリソースを解放する
  • 例外メッセージには、エラーの原因や対処法に関する情報を含める
  • 過剰な例外処理は避ける

サンプルコード

以下のサンプルコードでは、ユーザーに入力を促し、数値以外の入力を与えた場合にValueError例外をキャッチして処理しています。

while True:
    try:
        num = int(input("数値を入力してください: "))
        break
    except ValueError:
        print("数値を入力してください。")
print(f"入力された数値は: {num}")

関連記事