我有一个处理对数据库的访问的类。我正在尝试在数据库交互期间捕获异常,因为我正在使用装饰器。
我目前正在返回装饰器中捕获的错误,并在每次运行类方法时检查返回的值是否为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):
[...]
我是菜鸟,如果你们有更好的解决方案,请告诉我! 谢谢您的关注。