四川省网站建设_网站建设公司_网站开发_seo优化
2026/1/10 4:30:43 网站建设 项目流程

@浙大疏锦行

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

# 导入必要模块,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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询