Pythonでカスタム例外に追加情報を含める方法

この記事では、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のカスタム例外を使って、様々な追加情報をエラーに含めることができます。これによって、エラー処理がより柔軟に、かつ、情報量を増やして行えます。

コメント

コメントする

目次