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
相关推荐
2301_782040454 小时前
CSS Flex布局中如何实现导航栏与Logo的左右分布_利用justify-content- space-between
jvm·数据库·python
yaoxin5211234 小时前
400. Java 文件操作基础 - 使用 Buffered Stream I/O 读取文本文件
java·开发语言·python
用户8356290780515 小时前
使用 Python 自动创建 Excel 折线图
后端·python
小白学大数据5 小时前
面向大规模爬取:Python 全站链接爬虫优化(过滤 + 断点续爬)
开发语言·爬虫·python
WL_Aurora6 小时前
【每日一题】贪心
python·算法
IT策士6 小时前
Python 中间件系列:redis 深入浅出
redis·python·中间件
Dxy12393102166 小时前
Python Pillow库:`img.format`与`img.mode`的区别详解
开发语言·python·pillow
༒࿈南林࿈༒7 小时前
刺猬猫小说下载
python·js逆向
.柒宇.7 小时前
AI-Agent入门实战-AI私厨
人工智能·python·langchain·agent·fastapi
默子昂7 小时前
langchain 基本使用
开发语言·python·langchain