WEEK 05 / 16 语言核心 · 文件 IO / 异常 / 类
PYTHON 程序设计 · V2 · 第 5 周(100 分钟 · L10–L11)

让程序「记得住」
也「扛得住」

文件 IO 解决「重启就失忆」,异常处理解决「一断网就崩溃」, 类把散落的状态打包成盒子。本周收官语言核心——之后带着全套武器进入真实数据世界。

所属模块 M2 语言核心← → 翻页 · F 全屏

今日课表(100 分钟)

时间环节要点
0–6两个痛点重启失忆(演示)+ 断网崩溃(演示)——今天解决
6–18文件 IOopen 模式 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–86AIChatManager 演示逐步建类:骨架→send→clear→创建实例使用
86–96动手练习运行场:ChatSession 补全 user_count 方法
96–100M2 收官手里的武器清单;下周进入真实数据世界

M2 收官课:课后把「手里的武器清单」对照自查一遍。

开场演示:两个痛点

痛点一:失忆 跑 L9 的对话程序,聊了三轮 → 关掉重跑 → 历史全没了。 → 文件 IO:把数据存成 JSON,重启读回来。
痛点二:脆弱 拔掉网线再跑 → 红色 Traceback 满屏,程序当场崩溃。 → 异常处理:接住错误,优雅降级。

文件 IO:把数据存下来

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)

异常处理:接住错误

try:
    resp = client.chat.completions.create(...)
except ConnectionError as e:
    print("网络不通,稍后重试:", e)
except FileNotFoundError:
    messages = []              # 首次运行没有历史文件,给个空列表
finally:
    print("本次调用结束")   # 无论如何都执行

动手:健壮的对话存储

交互 · 浏览器内运行(L10 课堂主线简化版)

类:把数据和操作装进同一个盒子

痛点回顾: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("你好")

动手:实现一个迷你会话管理器

交互 · 补全 TODO 再运行

模块:代码的组织单位

模块
一个 .py 文件
→
包
文件夹 + __init__.py
→
import json
拿来就用

M2 收官:你手里的武器

数据与逻辑
  • 类型与转换(W3)
  • 四种数据结构选型(W3)
  • 分支循环(W4)
  • 函数与契约(W4)
健壮与组织
  • 文件 IO 持久化(本周)
  • 异常处理(本周)
  • 类封装状态(本周)
  • 模块与包(本周)
下半学期全部建立在语言核心之上:W6 起去真实的数据世界(HTTP / API / 爬虫 / Pandas)。

随堂小测(3 题)

交互 · 点击选项作答

课后与下周预告

本周课后
下周:W6 HTTP 与数据获取 F12 打开新世界:请求-响应模型 → requests 调 3 个真实 API → 网页爬取精要与伦理。 提前看下周课件 →

深入阅读:M2 模块页 · 经典笔记 7.3 文件读写 · 11.3 类