Day31 函数专题2

@浙大疏锦行

作业:编写一个装饰器logger,在函数执行前后打印日志信息

python 复制代码
# 导入必要模块,functools.wraps用于保留被装饰函数的元信息
import functools
from datetime import datetime

def logger(func):
    """
    日志装饰器:在函数执行前后打印相关日志信息
    :param func: 被装饰的函数
    :return: 包装后的函数
    """
    # 使用functools.wraps装饰内层函数,保留原函数的__name__、__doc__等元信息
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        """内层包装函数,实现日志打印逻辑"""
        # 1. 函数执行前:打印前置日志
        func_name = func.__name__  # 获取原函数名
        current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")  # 获取当前格式化时间
        print(f"[{current_time}] 开始执行函数:{func_name}()")
        print(f"[{current_time}] 函数{func_name}的位置参数:{args}")
        print(f"[{current_time}] 函数{func_name}的关键字参数:{kwargs}")
        
        # 2. 执行原函数,保存返回值(兼容有返回值的函数)
        try:
            result = func(*args, **kwargs)
        except Exception as e:
            # 捕获函数执行异常并打印
            print(f"[{current_time}] 函数{func_name}执行失败,异常信息:{str(e)}")
            raise  # 重新抛出异常,不影响原函数的异常传播
        else:
            # 3. 函数执行成功后:打印后置日志
            print(f"[{current_time}] 函数{func_name}执行完成,返回结果:{result}")
            return result  # 返回原函数的执行结果
    
    return wrapper
相关推荐
(●—●)橘子……10 分钟前
力扣第503场周赛练习理解
python·学习·算法·leetcode·职场和发展·周赛
爱吃羊的老虎35 分钟前
【JAVA】python转java:Spring Boot 入门
java·spring boot·python
小桥流水---人工智能1 小时前
【已解决】ImportError: cannot import name ‘AdamW‘ from ‘transformers.optimization‘
python
芝麻开门GEO1 小时前
泰安GEO优化服务,真的能提升效果吗?
人工智能·python
颜酱1 小时前
选读:工业级调用 LangChain:从 Demo 到企业级应用
python
颜酱2 小时前
LangChain 调用大模型实战:从跑通到服务商与模型选型
python·langchain
唐装鼠3 小时前
Nginx + Gunicorn + Python Web 应用 架构(Claude)
python·nginx·gunicorn
梦想三三3 小时前
【PYthon词频统计与文本向量化】苏宁易购评论分析实战
开发语言·python
biter down3 小时前
9:JSONSchema
python
日晨难再4 小时前
C语言&Python&Bash&Tcl:全局变量和局部变量
c语言·python·bash·tcl