Pythonのtryによる例外処理の仕組みとエラーハンドリングの使い方をわかりやすく解説

スポンサーリンク
スポンサーリンク

tryの概要

例外処理(エラーハンドリング) Python予約語

try

概要 try は、プログラムの実行中に発生する例外(エラー)をキャッチし、安全に処理を継続するためのキーワードです。exceptfinally と組み合わせて使用します。

わかりやすく説明 try を使うと、「この部分でエラーが発生するかもしれないので、安全に処理する」というコードを書くことができます。例えば、「ファイルを開くが、存在しなかったらエラーメッセージを表示する」といった処理に使われます。

  • try ブロック内で発生した例外は、except でキャッチできます。
  • エラー発生時に適切なメッセージを表示したり、代替処理を実行可能。
  • 例外が発生してもしなくても実行される finally ブロックと組み合わせられる。

try-exceptの基本的な使い方

以下の例では、ゼロ除算エラーを try-except で処理しています。

# try-except を使ったエラーハンドリング
try:
    result = 10 / 0  # ゼロ除算エラー発生
except ZeroDivisionError:
    print("エラー: 0で割ることはできません")
  • 10 / 0ZeroDivisionError が発生。
  • except によりエラーをキャッチし、プログラムがクラッシュせずに続行可能。

特定の例外をキャッチする

except に特定の例外を指定することで、適切なエラーメッセージを表示できます。

# 異なる種類の例外を処理
try:
    x = int("abc")  # 数値変換エラー
except ValueError:
    print("エラー: 数値に変換できません")
  • int("abc")ValueError が発生。
  • except ValueError によりエラーメッセージを表示。

複数の例外を処理する

異なる種類のエラーを一つの except ブロックで処理できます。

# 複数の例外を処理
try:
    num = int(input("数値を入力: "))
    result = 10 / num
except (ValueError, ZeroDivisionError) as e:
    print(f"エラー発生: {e}")
  • ユーザーが数値以外を入力すると ValueError
  • 0 を入力すると ZeroDivisionError
  • どちらのエラーも except でキャッチし、メッセージを表示。

すべての例外をキャッチする

予期しないエラーをキャッチする場合、except Exception を使用します。

# すべての例外をキャッチ
try:
    value = 10 / 0
except Exception as e:
    print(f"エラー発生: {e}")
  • 例外の種類を限定せず、すべてのエラーをキャッチ可能。
  • ただし、特定のエラーだけを処理したい場合は、明示的に種類を指定すべき。

finallyで必ず実行される処理を記述

finally を使うと、エラーの有無に関係なく最後に必ず実行される処理を書けます。

# finally を使った後処理
try:
    file = open("sample.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("ファイルが見つかりません")
finally:
    print("処理終了")
  • ファイルが見つからない場合は except によりエラーメッセージを表示。
  • finally により、エラーの有無にかかわらず「処理終了」と表示される。

elseでエラーがなかった場合の処理

else を使うと、エラーが発生しなかった場合のみ実行されるコードを記述できます。

# else を使ったエラーハンドリング
try:
    num = int(input("数値を入力: "))
    result = 10 / num
except ZeroDivisionError:
    print("エラー: 0で割ることはできません")
except ValueError:
    print("エラー: 数値を入力してください")
else:
    print(f"計算結果: {result}")
  • エラーが発生しない場合のみ、else の処理が実行される。
  • エラー発生時は except のブロックが実行されるため、else は実行されない。

tryの注意点

  • 特定の例外をキャッチする: すべてのエラーを except Exception でキャッチするとデバッグが難しくなる。
  • finally を使うとリソースの解放を確実に実行できる: ファイルやデータベースの接続を適切に閉じる。
  • 例外メッセージを適切に表示する: ユーザーが原因を理解しやすいメッセージを出す。

tryのよくある質問

Q: except でエラーメッセージを表示せずに無視してもいい?
A: 可能だが、エラーが発生したことをログに記録するのが推奨される。
Q: finally は必ず実行される?
A: はい。エラーが発生しても finally ブロックは必ず実行される。
Q: else はなくてもいい?
A: なくても動作するが、エラーがないときの処理を分けるのに便利。

まとめ

try は、プログラムの実行中に発生する例外を安全に処理するためのキーワードです。

  • エラー発生時にプログラムのクラッシュを防げる。
  • except で適切なエラーメッセージを表示できる。
  • finally で後処理を確実に実行可能。

適切に try を活用し、安全なプログラムを作成しましょう。