今天学习时遇到一个奇怪的问题,程序可以正常跑,但是加入异常处理装饰器后,报错TypeError: 'float' object is not callable,网上没有找到很好的解决方法,经过尝试发现运行时把函数名的()去掉,可以解决。
print(try_test())
改成
print(try_test)
测试简单异常处理装饰器的完整代码如下
# python中,所有异常处理的基类为BaseException
from functools import wraps
def exp_test(fun):
# fun是需要装饰的函数名称
@wraps(fun)
# 保证函数名称不会改变
def wrapped_function(*args, **kwargs):
try:
result = fun(*args, **kwargs)
print("function goes well...")
return result
except BaseException as errors:
print("function has an error...")
print(errors)
finally:
print("function end with logs")
return wrapped_function()
@exp_test
def try_test():
return 1 / 0
if __name__ == '__main__':
print(try_test())
正常运行结果如图