在装饰器中运行类方法

时间:2019-06-03 12:47:26

标签: python exception python-decorators

我有一个处理对数据库的访问的类。我正在尝试在数据库交互期间捕获异常,因为我正在使用装饰器。

我目前正在返回装饰器中捕获的错误,并在每次运行类方法时检查返回的值是否为Exception实例。这确实有效,但是我想知道是否有更好的方法,因为我的代码变得重复了。

我想到了使用装饰器来调用类方法。有可能吗?

这是一个代码示例:

def catch_exception(f):
    @functools.wraps(f)
    def func(*args, **kwargs):
        try:
            return f(*args, **kwargs)
        except Exception as error:
            # call method connection_error(error)

    return func


class AccessDB(object):

    def connection_error(self, error):
        [...]

    @catch_exception
    def add_user(self, username, password, is_admin=False):
        [...]

    @catch_exception
    def get_user(self, username):
        [...]

这是我如何使用装饰器的示例。 (我有return error而不是# call method connection_error(error)

user = db.get_user(username)
if not isinstance(user, Exception):
   [...]

我是菜鸟,如果你们有更好的解决方案,请告诉我! 谢谢您的关注。

0 个答案:

没有答案