在Python中拦截模块范围内的特定异常

时间:2014-10-07 02:53:29

标签: python exception exception-handling

我已经定义了一个自定义异常,我需要跟踪它并在每次抛出时触发一个进程。目前,我将每行容易在try - except对中引发错误,但随着代码的增长,这看起来越来越难看和繁琐。

有没有办法制作模块范围的try - except声明?

TL;博士

我目前正在这样做:

class MyError(exception):
   pass 

try:
   #error-prone code
except MyError:
   context_aware_function()

我正在寻找这个:

class MyError(exception):
   pass 

errorManager.redirect(from=MyError,to=context_aware_operation)
#error-prone code

1 个答案:

答案 0 :(得分:2)

您可以通过使用decorators对其进行注释来拦截每个函数的异常。装饰器实现为一个函数,它将函数作为输入并返回函数的修改版本。在这种情况下,我们用try / except块包装输入函数:

def catch_error(function):
    def wrapper(*args, **kws):
        try:
            return function(*args, **kws)
        except MyError:
            #handle error
    return wrapper

@catch_error
def foo():
    #error-prone code