この記事では、Pythonでカスタム例外に追加情報を含める方法について解説します。具体的なコード例とその解説、応用例を含めています。
目次
はじめに
Pythonでは例外処理が非常に重要です。しかし、標準の例外クラスでは不足する情報がある場合、カスタム例外を用いて独自の情報を含めることができます。
基本的なカスタム例外の作成
最初に、基本的なカスタム例外の作成方法から見ていきましょう。
class MyCustomException(Exception):
pass
try:
raise MyCustomException("これはテストです")
except MyCustomException as e:
print(f"エラー発生: {e}")
この例では、`MyCustomException`という名前のカスタム例外を作成しました。ただし、これには何も追加情報が含まれていません。
カスタム例外に追加情報を含める
次に、このカスタム例外に追加情報を含める方法を見ていきましょう。
コンストラクタに情報を追加
カスタム例外のコンストラクタをオーバーライドして、追加情報を含めることができます。
class MyExceptionWithInfo(Exception):
def __init__(self, message, code):
super().__init__(message)
self.code = code
try:
raise MyExceptionWithInfo("エラー発生", 404)
except MyExceptionWithInfo as e:
print(f"エラーメッセージ: {e}, エラーコード: {e.code}")
この例では、`MyExceptionWithInfo`クラスに`code`という追加情報を持たせました。この`code`は、エラーが発生した際に`e.code`としてアクセス可能です。
応用例
カスタム例外に追加情報を含める方法は多々あります。いくつかの応用例を紹介します。
応用例1: エラーのカテゴリを追加
class CategorizedException(Exception):
def __init__(self, message, category):
super().__init__(message)
self.category = category
try:
raise CategorizedException("データベースエラー", "Database")
except CategorizedException as e:
print(f"{e.category}: {e}")
応用例2: エラー発生時の環境情報を含める
import sys
class ExceptionWithEnvInfo(Exception):
def __init__(self, message):
super().__init__(message)
self.env_info = sys.version
try:
raise ExceptionWithEnvInfo("何らかのエラー")
except ExceptionWithEnvInfo as e:
print(f"エラー: {e}, Pythonバージョン: {e.env_info}")
応用例3: スタックトレース情報を保持
import traceback
class ExceptionWithTraceback(Exception):
def __init__(self, message):
super().__init__(message)
self.traceback = traceback.format_exc()
try:
1 / 0 # ZeroDivisionErrorを発生させる
except ZeroDivisionError:
e = ExceptionWithTraceback("0で割り算しました")
print(e.traceback)
まとめ
Pythonのカスタム例外を使って、様々な追加情報をエラーに含めることができます。これによって、エラー処理がより柔軟に、かつ、情報量を増やして行えます。
コメント