将异常处理程序分配给类的方法

时间:2015-12-04 04:42:32

标签: python exception-handling

我有一个具有多个功能的课程。这些函数将处理类似的异常。我可以使用处理函数并将其分配给函数。

最后,我希望函数中不应该有异常处理,但是在异常时控件应该转到这个处理函数。

Class Foo:
  def a():
    try:
      some_code
    except Exception1 as ex:
      log error
      mark file for error
      other housekeeping
      return some_status, ex.error
    except Exception2 as ex:
      log error
      mark file for error
      other housekeeping
      return some_status, ex.error

同样,其他功能也有同样的例外。我想在一个单独的方法中进行所有这些异常处理。只是函数应该将控件移交给异常处理函数。

我可以考虑从包装器处理函数调用每个函数。但这对我来说非常奇怪。

Class Foo:
  def process_func(func, *args, **kwargs):
    try:
      func(*args, **kwargs)
    except Exception1 as ex:
      log error
      mark file for error
      other housekeeping
      return some_status, ex.error
    except Exception2 as ex:
      log error
      mark file for error
      other housekeeping
      return some_status, ex.error

  def a(*args, **kwargs):
    some_code

有没有更好的方法呢?

1 个答案:

答案 0 :(得分:3)

您可以定义一个函数装饰器:

def process_func(func):
    def wrapped_func(*args, **kwargs):
        try:
            func(*args, **kwargs)
        except ...
    return wrapped_func

并用作:

@process_func
def func(...):
   ...

因此func(...)相当于process_func(func)(...),错误在wrapped_func内处理。