【Python】例外処理のtry、exceptでエラーをキャッチする

はじめに

Pythonでプログラムを作っていると、思わぬエラーに特定の処理をしたい場合があります。Pythonには「try/except」という便利な仕組みがあり、エラーの発生でexcept処理を行うことができます。

この記事では、このtry/exceptの使い方をわかりやすく解説します。

エラー処理をキャッチしよう

Pythonで例外処理を行うための基本構文が「try/except」です。基本的な構文は次のとおりです:

try:
    # エラーが発生する可能性のあるコード
    実行したいコード
except:
    # エラーが発生した場合に実行されるコード
    エラー発生時のコード

具体例でエラー処理を身につけるために、例えば以下のようなケースをみてみましょう。

  • ファイルが存在しないのに開こうとする
  • ゼロで割り算をしようとする
  • リストの範囲外にアクセスしようとする

具体例1: ファイルが存在しない場合

try:
    file = open("存在しないファイル.txt", "r")
    content = file.read()
    file.close()
except FileNotFoundError:
    print("ファイルが見つかりません。ファイル名を確認してください。")

具体例2: ゼロ除算の場合

try:
    num1 = 10
    num2 = 0
    result = num1 / num2
    print(f"結果: {result}")
except ZeroDivisionError:
    print("0で割ることはできません。除数を確認してください。")
    # 代替値を設定することもできます
    result = 0  # または他の適切な値
    print(f"代わりに結果を {result} としました。")

具体例3: リストの範囲外アクセスの場合

# エラー処理あり
try:
    my_list = [1, 2, 3]
    index = 10
    value = my_list[index]
    print(f"{index}番目の要素: {value}")
except IndexError:
    print(f"リストのインデックス{index}は範囲外です。リストの長さは{len(my_list)}です。")
    value = my_list[-1] if my_list else None
    print(f"代わりに最後の要素を使用します: {value}")

エラーメッセージを取得する

例外オブジェクトを変数として取得することで、エラーメッセージを取得してコンソールに表示することもできます。

try:
    num1 = 10
    num2 = 0
    result = num1 / num2
except ZeroDivisionError as e:
    print(f"エラーが発生しました: {e}")
# 実行結果: エラーが発生しました: division by zero

elseとfinallyを使用する

try、exceptの構文では、elsefinallyというブロックも使用できます。

elseブロック:try内のコードがエラーなく実行された場合のみ実行されます。 ・ finallyブロック:エラーの有無にかかわらず、最後に必ず実行されます。ファイルのクローズやリソースの解放などによく使われます。

try:
    num1 = 10
    num2 = 2
    result = num1 / num2
except ZeroDivisionError:
    print("ゼロで割ることはできません。")
else:
    print(f"計算結果: {result}")  # エラーがなかった場合のみ実行
finally:
    print("計算処理を終了します。")  # 常に実行
# 実行結果:
# 計算結果: 5.0
# 計算処理を終了します。