泛型异常处理返回值 [英] generic exception handling return value

查看:136
本文介绍了泛型异常处理返回值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



而不是这样做:

  try:
...
除了异常:
return list()

尝试:
...
除了异常:
返回dict()

尝试:
...
除了异常:
return str()

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

  def handler(代码,默认):
try:
code
except例外:
return default

def mains():
code =<执行代码>
default = str()
返回处理程序(代码,dafault)

在一个更加pythonic的方式

解决方案

一个简单的装饰师会为你做这个。

  import functools 


def catch_wrap(on_err):
def wrapper(func):
@functools。包裹(func)
def inner(* args,** kw):
try:
return func(* args,** kw)
除了异常:
return on_err
return inner
return wrapper

一个简短的例子:

  @catch_wrap('SPAM!')
def doer():

YUP

1/0
return'EGGS!'


print doer()
print doer .__ doc__


I am trying to create generic exception handler - for where I can set an arg to return in case of exception.

instead of doing:

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

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

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

I would like to create system whereby I have a generic exception handler that returns an arg I provide. e.g,

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

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

but in a more pythonic way

解决方案

A simple decorator will do this for you.

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

A short example:

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


print doer()
print doer.__doc__

这篇关于泛型异常处理返回值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆