文件 IO 解决「重启就失忆」,异常处理解决「一断网就崩溃」, 类把散落的状态打包成盒子。本周收官语言核心——之后带着全套武器进入真实数据世界。
| 时间 | 环节 | 要点 |
|---|---|---|
| 0–6 | 两个痛点 | 重启失忆(演示)+ 断网崩溃(演示)——今天解决 |
| 6–18 | 文件 IO | open 模式 r/w/a;with 自动关闭;json.dump/load 存读对话 |
| 18–30 | 异常处理 | Traceback 从最后一行往前读;捕获要具体;API 三大异常 |
| 30–42 | 动手练习 | 运行场:存档→读回→FileNotFoundError 兜底 |
| 42–56 | 模块与包 | import 机制;.py=模块、文件夹=包;不用背标准库 |
| 56–72 | 类语法 | class/__init__/self;类=图纸 实例=产品;client 就是实例 |
| 72–86 | AIChatManager 演示 | 逐步建类:骨架→send→clear→创建实例使用 |
| 86–96 | 动手练习 | 运行场:ChatSession 补全 user_count 方法 |
| 96–100 | M2 收官 | 手里的武器清单;下周进入真实数据世界 |
M2 收官课:课后把「手里的武器清单」对照自查一遍。
import json
# 存:对话历史 → JSON 文件
with open("history.json", "w", encoding="utf-8") as f:
json.dump(messages, f, ensure_ascii=False, indent=2)
# 读:JSON 文件 → Python 对象
with open("history.json", encoding="utf-8") as f:
messages = json.load(f)
"r" 读 / "w" 覆盖写 / "a" 追加with 语句保证文件一定被关闭(出异常也会关)——处理文件的标准写法try:
resp = client.chat.completions.create(...)
except ConnectionError as e:
print("网络不通,稍后重试:", e)
except FileNotFoundError:
messages = [] # 首次运行没有历史文件,给个空列表
finally:
print("本次调用结束") # 无论如何都执行
except Exception 一把梭会吞掉所有错误,让 bug 更难找痛点回顾:client、history、api_key、model、system_prompt 五个变量在函数间传来传去——
class AIChatManager:
def __init__(self, api_key, model="deepseek-chat"):
self.api_key = api_key # 属性:数据
self.model = model
self.history = [] # 对话历史也装在盒子里
def send(self, text): # 方法:操作
self.history.append({"role": "user", "content": text})
# ...调用 API(此处省略)...
def clear(self):
self.history = []
chat = AIChatManager("sk-...") # 类是图纸,chat 是实例(产品)
chat.send("你好")
self 指向实例本身;__init__ 是出厂设置import json / from pathlib import Path——两种引入方式深入阅读:M2 模块页 · 经典笔记 7.3 文件读写 · 11.3 类