webアプリのソースコードをいじっている際、以下のような状況に出会した。
- とある関数を実行した際、特定の処理によるエラーのみスルーさせて処理を続行したい
- 成功の場合も失敗の場合も必ず実行させたい処理がある
- フロントには処理中に一部エラーが発生したことを通知したい
pythonのtry/catchでこんな感じの書き方をしたら動いたので備忘録として書き留めておく。
サンプルコード
class SampleException(Exception):
pass
def specific_func(raise_error: bool):
if raise_error:
raise Exception("error from specific_func")
else:
print("[INFO] success specific_func")
def error_sample(raise_error: bool):
try:
specific_func(raise_error=raise_error)
except Exception as e:
print("[ERROR] ",e)
raise SampleException("一部の処理に失敗しました")
finally:
print("[INFO] 必ず実行したい処理")
main.py
print("=== 異常系 =====================")
try:
error_sample(raise_error=True)
print("(通知) 処理に成功しました")
except SampleException as e:
print("(通知)", e)
print("=== 正常系 =====================")
try:
error_sample(raise_error=False)
print("(通知) 処理に成功しました")
except SampleException as e:
print("(通知)", e)
実行結果
=== 異常系 =====================
[ERROR] error from specific_func
[INFO] 必ず実行したい処理
(通知) 一部の処理に失敗しました
=== 正常系 =====================
[INFO] success specific_func
[INFO] 必ず実行したい処理
(通知) 処理に成功しました