1

一般的な例外ハンドラーを作成しようとしています-例外の場合に返す引数を設定できる場所。

代わりに:

try:
    ...
except Exception:
    return list()

try:
    ...
except Exception:
    return dict()

try:
    ...
except Exception:
    return str()

私が提供する引数を返す一般的な例外ハンドラーを持つシステムを作成したいと思います。例えば、

def handler(code, default):
    try:
        code
    except Exception:
        return default

def mains():
    code = <code to execute>
    default = str()
    return handler(code, dafault)

しかし、よりpythonicな方法で

4

1 に答える 1

4

シンプルなデコレーターがこれを行います。

import functools


def catch_wrap(on_err):
    def wrapper(func):
        @functools.wraps(func)
        def inner(*args, **kw):
            try:
                return func(*args, **kw)
            except Exception:
                return on_err
        return inner
    return wrapper

簡単な例:

@catch_wrap('SPAM!')
def doer():
    """
    YUP
    """
    1 / 0
    return 'EGGS!'


print doer()
print doer.__doc__
于 2012-11-03T23:09:33.307 に答える