我想做一个装饰器,它将捕获异常并充分记录它们.
def logger(foo):
try:
print foo()
except Exception as e:
print e
@logger
def d():
return 2/2
if __name__ == '__main__':
d()
Run Code Online (Sandbox Code Playgroud)
这是正确的,但我然后运行它,我有这样的例外:
1
Traceback (most recent call last):
File "log.py", line 14, in <module>
d()
TypeError: 'NoneType' object is not callable
Run Code Online (Sandbox Code Playgroud)
为什么解释器告诉我该函数有None类型,但是调用它并打印答案?
jef*_*upp 22
你的装饰器需要返回一个函数,但是它没有返回任何东西,因此'TypeError:'NoneType'对象不可调用'.你可以这样实现它:
def logger(foo):
def fn():
try:
print foo()
except Exception as e:
print e
return fn
Run Code Online (Sandbox Code Playgroud)
查看这个问题,了解如何编写/使用装饰器的一个很好的例子.