4. エラー処理
- try-except文の使用
- 複数の例外の処理
-
else
とfinally
の使用 - 例外の再発生
- カスタム例外の作成
エラー処理はプログラミングにおいて非常に重要な概念です。Pythonでは、try-except
文を使用してエラー処理を行います。これにより、プログラムが予期せぬエラーに遭遇した際に、適切に対応することができます。
以下、Pythonのエラー処理について詳しく説明し、サンプルコードを交えて解説します。
1. 基本的なtry-except
文の使用
最も基本的なエラー処理は、try-except
文を使用することです。
try:
# エラーが発生する可能性のあるコード
result = 10 / 0
except ZeroDivisionError:
# エラーが発生した場合の処理
print("0で割ることはできません")
この例では、0で割ろうとしているためZeroDivisionError
が発生します。except
ブロックでこのエラーをキャッチし、適切なメッセージを表示しています。
2. 複数の例外の処理
複数の種類の例外を個別に処理することもできます。
try:
num = int(input("数字を入力してください: "))
result = 10 / num
except ValueError:
print("有効な数字を入力してください")
except ZeroDivisionError:
print("0で割ることはできません")
この例では、ユーザーの入力が数字でない場合はValueError
が、0の場合はZeroDivisionError
が発生します。それぞれに対して適切な処理を行っています。
3. else
とfinally
の使用
try-except
文にはelse
とfinally
ブロックを追加することができます。
try:
file = open("example.txt", "r")
content = file.read()
except FileNotFoundError:
print("ファイルが見つかりません")
else:
print("ファイルの内容:", content)
finally:
file.close()
else
ブロックは例外が発生しなかった場合に実行されます。finally
ブロックは例外の発生有無に関わらず常に実行されます。この例では、ファイルを開く操作が成功した場合にのみ内容を表示し、成功・失敗に関わらずファイルを閉じています。
4. 例外の再発生
場合によっては、例外をキャッチした後に再度発生させたいことがあります。
def process_data(data):
try:
result = data['key'] / 0
except KeyError:
print("必要なキーが見つかりません")
raise # KeyErrorを再発生させる
except ZeroDivisionError:
print("0での除算が行われました")
raise ValueError("無効な操作です") # 新しい例外を発生させる
try:
process_data({'key': 0})
except ValueError as e:
print("エラーが発生しました:", str(e))
この例では、process_data
関数内でKeyError
をキャッチした場合はそのまま再発生させ、ZeroDivisionError
の場合は新たにValueError
を発生させています。
5. カスタム例外の作成
独自の例外クラスを作成することで、より具体的なエラー処理が可能になります。
class InvalidAgeError(Exception):
pass
def verify_age(age):
if age < 0:
raise InvalidAgeError("年齢は0以上である必要があります")
elif age > 120:
raise InvalidAgeError("年齢が現実的ではありません")
else:
print("有効な年齢です")
try:
verify_age(150)
except InvalidAgeError as e:
print("エラー:", str(e))
この例では、InvalidAgeError
という独自の例外クラスを定義し、年齢の検証に使用しています。
エラー処理を適切に行うことで、プログラムの堅牢性が向上し、予期せぬ状況でも適切に対応できるようになります。ただし、過剰なエラー処理はコードの可読性を下げる可能性があるため、バランスを取ることが重要です。
これらの例を参考に、実際のプロジェクトでエラー処理を実装してみてください。様々な状況でエラー処理を行うことで、より信頼性の高いプログラムを作成することができます。