当前位置:首页>python>【Python】Day20:阶段实战:API调用日志与重试工具(上)

【Python】Day20:阶段实战:API调用日志与重试工具(上)

  • 2026-10-11 06:21:34
【Python】Day20:阶段实战:API调用日志与重试工具(上)

🎯 学习目标

  1. 完成项目 需求分析 与 模块拆分
  2. 实现 模拟 API 调用 函数
  3. 实现 文本日志记录 功能
  4. 初步组合调用与日志,跑通基本流程

一、项目需求分析

  1. 项目目标
    在调用外部 API 时(如大模型接口),网络可能不稳定导致请求失败。我们需要一个工具:
    • 记录每次 API 调用的状态(成功/失败)
    • 失败时自动重试若干次
    • 日志保存为文件,方便排查
  2. 功能拆解
    api_retry_tool/├── 模拟API调用函数   → 返回成功或模拟超时├── 日志记录函数       → 写入文本日志├── 重试逻辑函数       → 失败重试N次└── 主程序入口         → 组合以上功能

二、模拟 API 调用

  1. 用random模拟不稳定网络
    import randomimport timedefcall_api(api_name, success_rate=0.5):"""    模拟API调用    :param api_name: API名称    :param success_rate: 成功率(0~1)    :return: 成功返回响应字典,失败返回None    """    print(f"  正在调用 {api_name}...")    time.sleep(0.5)  # 模拟网络延迟if random.random() < success_rate:   # random.random() 生成 0-1 之间的随机数return {"status": "success", "data": f"{api_name}的响应数据"}else:raise ConnectionError(f"{api_name} 调用超时")  # 模拟失败

三、日志记录函数

  1. 文本日志写入
    from datetime import datetimedefwrite_log(message, filename="api_log.txt"):"""写入日志文件"""    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")    log_line = f"[{timestamp}] {message}\n"with open(filename, "a", encoding="utf-8") as f:        f.write(log_line)    print(f"  📝 日志:{log_line.strip()}")

四、初步组装

  1. 主程序
    import randomimport timefrom datetime import datetimedefcall_api(api_name, success_rate=0.5):    print(f"  正在调用 {api_name}...")    time.sleep(0.5)if random.random() < success_rate:return {"status": "success", "data": f"{api_name}的响应数据"}else:raise ConnectionError(f"{api_name} 调用超时")defwrite_log(message, filename="api_log.txt"):    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")    log_line = f"[{timestamp}] {message}"with open(filename, "a", encoding="utf-8") as f:        f.write(log_line + "\n")    print(f"  📝 {log_line}")defmain():    api_name = "ChatGPT"    print(f"开始调用 {api_name} API")try:        result = call_api(api_name)        write_log(f"✅ {api_name} 调用成功 - {result}")except ConnectionError as e:        write_log(f"❌ {api_name} 调用失败 - {e}")    print("程序结束")if __name__ == "__main__":    main()

✍️ 实战练习

  1. 运行上面的代码多次,观察日志文件api_log.txt的内容。
  2. 修改success_rate为 0.1(10%成功率),观察失败日志是否正常记录。
  3. 思考:如何在失败后自动重试?(明天实现)

✅ 自测清单

  • [ ] 能分析项目需求,拆分为独立功能模块
  • [ ] 能用random和raise模拟不稳定的 API 调用
  • [ ] 能写日志记录函数,追加写入到文件
  • [ ] 能用try...except捕获模拟的 API 异常并记录日志

最新文章

随机文章