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
相关推荐
Looooking16 分钟前
Python 之获取安装包所占用磁盘空间大小
python
WenGyyyL24 分钟前
ColBERT论文研读——NLP(IR)里程碑之作
人工智能·python·语言模型·自然语言处理
lxy-up28 分钟前
RAG--切片策略
python
ricky_fan35 分钟前
(OpenAI)Codex 安装、部署使用方式
python·macos·conda·vim
小王不爱笑13236 分钟前
Java 对象拷贝(浅拷贝 / 深拷贝)
java·开发语言·python
Flittly1 小时前
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(9)Agent Teams (智能体团队)
python·agent
DevnullCoffe1 小时前
Open Claw × 跨境电商:5个最有价值的 AI Agent 应用场景深度拆解
python·api
zh路西法1 小时前
【宇树机器人强化学习】(六):TensorBoard图表与手柄遥控go2测试
python·深度学习·机器学习·机器人
szcsun51 小时前
关于在pycharm中新建项目创建虚拟化环境venv
ide·python·pycharm
码路飞1 小时前
体验完阿里「悟空」之后,我花 2 小时用 Python 撸了个 AI Agent 🔥
python·aigc