python デコレータを使って例外処理をモジュール化する
pythonで普通に例外処理を書くと、以下のようになる。
def hoge(*args): try: # 処理 except Exception as e: # 例外処理 return def fuga(*args): try: # 処理 except Exception as e: # 例外処理 return def piyo(*args): try: # 処理 except Exception as e: # 例外処理 return
例外処理の内容が全て同じである場合(例えばログに吐き出すとか)、かなり冗長である。
そこでデコレータを使用すると以下のように書ける。
def exception(func): def wrapper(*args, **kwargs): try: return func(*args, **kwargs) except Exception as e: # 例外処理 return wrapper @exception def hoge(*args): # 処理 return @exception def fuga(*args): # 処理 return @exception def piyo(*args): # 処理 return
やっている事は単純で、単にexceptionが受け取った関数をtry〜exceptで囲んでラップしているだけ。