初めに
エラーハンドリングは、エラーの内容ごとに異なる処理を行う必要があります。例えば、ステータスコードやエラーコードは内容ごとに出力します。
今回は、デフォルトの場合とタイムアウトの場合に、特定のエラーコードとメッセージを出力させるようにしました。
カスタムクラスの定義
class CustomExceptionBase(Exception):
STATUS_CODE: int = None
DEFAULT_MESSAGE: str = "デフォルトメッセージです"
def __init__(self, msg=None, *args, **kwargs):
if not msg:
msg = self.DEFAULT_MESSAGE_CODE
super().__init__(msg, *args, **kwargs)
class TimeOutException(CustomExceptionBase):
STATUS_CODE = 403
DEFAULT_MESSAGE = "Time out error!!"
まず、CustomExceptionBase
クラスにException
クラスを継承させることで、カスタム例外クラスの基底クラスとして定義します。
サブクラスのTimeOutException
クラスに基底クラスを継承して属性をオーバーライドすることで、タイムアウトエラー時にSTATUS_CODEを403
、DEFAULT_MESSAGEがTime out error!!
と出力することができます。
使用例
try:
...
try:
requests.get("hoge/hoge")
except requests.exceptions.Timeout:
raise TimeOutException()
except CustomExceptionBase as e:
return {
"statusCode": e.STATUS_CODE,
"body": "message": str(e),
"headers": hogehoge,
}
-
get
関数実行時のタイムアウトエラーの場合、raise
でTimeOutException
クラスを実行します。 - STATUS_CODEとDEFAULT_MESSAGE_CODEがオーバーライドされます
- 最終的にraiseをexceptでキャッチします。
e.STATUS_CODE
でSTATUS_CODE属性を使用し、str(e)
で設定したエラーメッセージを使用しています。