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}")