我有一个简单的异常日志记录装饰器,当我的脚本抛出异常时,它可以方便地发送自己的电子邮件.
def logExceptions(func):
def wrapper():
try:
func()
except Exception, e:
logger.exception(e)
return wrapper
但是,如果我想装饰一个类方法,我必须修改wrapper()以获取’self’,否则我会收到以下错误:
TypeError: wrapper() takes no arguments (1 given)
当然,在那一点上我不能用它来装饰任何非类方法,因为这样会发生这样的错误:
TypeError: wrapper() takes exactly 1 argument (0 given)
有没有一个干净的方法来解决这个问题?谢谢=)
解决方法:
通常的做法是定义你的包装器,使它接受* args和** kwargs并将它们传递给它包装的函数.这样它就可以包装任何函数.
另外,我得到的印象是你所谓的“类方法”是Python所谓的“实例方法”,而你所谓的“非类方法”就是Python所谓的“函数”. Python中的“非类方法”(例如,实例方法)采用自参数.