aop与python
熟悉 java的同学一定熟悉注解的使用,借助于注解可以定义元数据配置,我们常常有这种感受,“只要加上这个注解,我的组件就会被注册进去”,“只要加上这个注解,就会添加事务控制”,也会困惑,“为什么加了这个注解依然没有生效?”, python 没有提供像Java似的注解,但是提供了相比注解表达能力更加强大的装饰器。
例如 web框架 Flask 中的route ,errorhandler,及 python 自带的 property,staticmethod等。 实际上java 注解能实现的功能,python 的装饰器绝大部分都是可以胜任的,装饰器更像 Java 中注解加上Aop两者的组合, 这个结论最后我们会重点讨论,先按下不表。现在首先以日志打印的简单例子初步讲解一下装饰器的使用
实现对方法的异常捕获及发飞书消息
通用闭包捕获异常
def log_info(func):
"飞书消息装饰器"
def wrapper(*args, **kwargs):
try:
logger.debug("执行方法:" + func.__name__) # 控制台打印输出日志
return func(*args, **kwargs)
except Exception as e:
global data
data["content"]["text"] = "用例:"+func.__name__+"出现错误:"+str(e)
data = json.dumps(data)
data = data.encode("utf-8")
response = requests.</