環境
- Windows 10
- Python 3.10.1
- VSCode
結論
結論からにはなりますが、以下のルールで作成する必要があります。
- Exceptionクラスが親クラスになるように作成する
なお、Exceptionクラスを直接継承する必要はないが、Exceptionクラスのサブクラスを継承するようにすること - 例外クラスの名称は~Errorとなるように作成する
- 必要に応じて、コンストラクタや__str__を実装する
※__str__ は例外オブジェクトをプリントしたときに表示される文字列を指定するためのメソッド - 例外を送出するクラスでは、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について紹介しています。ぜひ参考にしてみてください。