我正在尝试使用装饰器来打印我的日志。为此,我在一个名为custom_logger.py的文件中定义了decorator:
import logging
class Logger(object):
def __init__(self,decoratee_enclosing_class):
self.decoratee_enclosing_class = decoratee_enclosing_class
def __call__(self, aFunc):
"""Trace entry, exit and exceptions."""
def loggedFunc( *args, **kw ):
print "enter", aFunc.__name__
try:
result= aFunc( *args, **kw )
except Exception, e:
print "exception", aFunc.__name__, e
raise
print "exit", aFunc.__name__
return result
loggedFunc.__name__= aFunc.__name__
loggedFunc.__doc__= aFunc.__doc__
return loggedFunc
这是我的示例测试代码:
from custom_logger import Logger
class Test(object):
@Logger('Test')
def testP(self):
print "hello"
a = Test()
a.testP()
我收到以下错误: Traceback(最近一次调用最后一次): 文件" test.py",第13行,in a.testP() TypeError:' NoneType'对象不可调用
任何人都可以指出我错过了什么?
我已关注此reference的链接。
答案 0 :(得分:3)
装饰器中有缩进错误。 __call__
方法的最后三行应与def loggedFunc
行的缩进位置相同。