2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonのtry/exceptメモ

Last updated at Posted at 2020-02-20

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] 必ず実行したい処理
(通知) 処理に成功しました
2
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?