Masayan tech blog.

  1. ブログ記事一覧>
  2. Pythonでユーザー定義例外を作成する際のTips

Pythonでユーザー定義例外を作成する際のTips

公開日

環境

  • Windows 10
  • Python 3.10.1
  • VSCode

結論

結論からにはなりますが、以下のルールで作成する必要があります。

  1. Exceptionクラスが親クラスになるように作成する
    なお、Exceptionクラスを直接継承する必要はないが、Exceptionクラスのサブクラスを継承するようにすること
  2. 例外クラスの名称は~Errorとなるように作成する
  3. 必要に応じて、コンストラクタや__str__を実装する
    ※__str__ は例外オブジェクトをプリントしたときに表示される文字列を指定するためのメソッド
  4. 例外を送出するクラスでは、raiseを使用することで例外をスローすることができる

上記を踏まえ、以下のような空文字を許容しない例外クラスを作成するとする。

※詳細は以下を参照

https://docs.python.org/ja/3.6/tutorial/errors.html#user-defined-exceptions

class EmptyStringError(Exception):
    def __init__(self, msg):
        self._msg = msg

    def __str__(self):
        return self._msg

使用例

Xstrクラスはインスタンス生成時に文字列を引数にとり、空文字の場合は、上記で作成したEmptyStringErrorが送出されるように実装しています

packages\test.py

  • 例外をcatchする箇所で、EmptyStringError as eとすることで、eの中からエラーメッセージやクラス名等を取り出すことが可能
from shared.Domain.xstr import XStr
from shared.Exception.empty_string_error import EmptyStringError
from shared.x_logger import XLogger

try:
    xstr = XStr("")
except EmptyStringError as e:
    print(e._msg)
    XLogger.exceptionToSlack(e._msg)

shared\Domain\xstr.py

from shared.base_class import BaseClass
from shared.Exception.empty_string_error import EmptyStringError

class XStr(BaseClass):
    def __init__(self, string: str):
        if not isinstance(string, str):
            raise TypeError
        # 空文字の場合
        if len(string) == 0:
            raise EmptyStringError("空文字は指定できません")

        self.string = string

送出されたエラーはslackに通知するようにしているので、下記のようなエラーメッセージが通知されます

まとめ

いかがでしたでしょうか。本記事では、Pythonでユーザー定義例外を作成する際のTipsについて紹介しています。ぜひ参考にしてみてください。