通用异常处理返回值

时间:2012-11-03 23:03:25

标签: python exception-handling

我正在尝试创建通用异常处理程序 - 我可以设置一个arg,以便在异常的情况下返回。

而不是:

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

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

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

我想创建一个系统,我有一个通用异常处理程序,它返回我提供的arg。例如,

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

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

但是以更加pythonic的方式

1 个答案:

答案 0 :(得分: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__