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
相关推荐
傲笑风6 小时前
【openvino】tinybert基于openvino服务化部署(四)
人工智能·python·自然语言处理·nlp·bert·openvino
维基框架7 小时前
WIKI 知识库 v1.1.1 正式发布
人工智能·python
谢白羽10 小时前
SGLang的AWQ量化笔记
笔记·python·sglang
迷迭香yy11 小时前
基金档案数据工程实战从收入分析到持仓穿透的Python解析 IG50免费开源股票数据API接口
开发语言·python
清水白石00811 小时前
Python 类型设计深度解析:TypedDict 能否替代 dataclass?从 JSON 数据边界到 API 设计的最佳实践
java·python·json
️学习的小王12 小时前
Git项目提交忽略文件怎么做?以Python项目为例,详解.gitignore
git·python·elasticsearch
前端 贾公子12 小时前
第09章:上下文与记忆 (6)
开发语言·前端·python
evans在进步12 小时前
Java 常用设计模式入门:建造者、工厂、单例、外观与代理
java·python·设计模式
jayson.h12 小时前
PDF 合并+添加页码 相关库、类、函数
开发语言·前端·python
典典分享指南13 小时前
用飞书多维表格搭建内容管理看板
java·python·r语言·composer·symfony