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で囲んでラップしているだけ。