全库自测与掌握检查

使用方法

先不看笔记完成“闭卷解释”和“现场任务”,再用下方答案要点核对。能认出术语不等于能独立工作;真正的掌握证据是可运行程序、失败测试、运行记录和对剩余风险的准确说明。

闭卷解释

  1. 解释解释器、虚拟环境、pip、依赖声明与锁文件的不同职责。
  2. 类型提示为什么不能替代运行时输入校验?dataclass 又解决什么问题?
  3. 纯函数、I/O 适配器和依赖注入如何共同提高可测试性?
  4. 解析 JSON 为什么要依次检查字节大小、编码、语法、根类型、字段和业务约束?
  5. 哪些失败允许重试?单次超时与总 deadline 有什么区别?
  6. 为什么结果、stderr、日志、指标和 trace 不能混成一条文本流?
  7. Mock 应放在哪里?为什么 patch 的通常是“查找名称的位置”?
  8. 并发、并行、并发上限与速率限制分别是什么?
  9. pyproject.toml、requirements 文件和锁文件是否等价?
  10. 模型提出工具调用后,Python 应用还必须执行哪些验证和授权?

答案要点

展开前先写自己的答案。

现场任务 A:可靠 JSON CLI

限时 90 分钟,从空目录实现:

  • 输入为 UTF-8 JSON 数组,每项含 id、text、priority;
  • id 唯一,text 为 1~500 个 Python 字符,priority 为 1~5 的整数(布尔值不得当整数接受);
  • 输入文件最大 256 KiB;
  • 输出按 priority 降序、id 升序排列,不修改输入;
  • stdout 输出 JSON,预期输入错误写 stderr 并返回退出码 2;
  • 至少 10 个测试覆盖边界、非法类型、重复 ID、大小上限和确定性。

完成后写 RUNBOOK.md:记录 Python 版本、运行/测试命令、副作用、未验证项和如何删除输出。不要创建 .venv 于本 vault,也不要放真实凭据。

验收证据

  • 在新临时目录运行全部测试;
  • 演示一个成功和两个不同失败类别;
  • Get-ChildItem -Recurse -Directory -Filter __pycache__ 没有任务生成缓存,或已在限定临时目录清理;
  • 说明排序、字符计数和最大字节数各自采用什么定义;
  • 证明重复运行同一输入产生逐字节相同的 stdout。

现场任务 B:把函数变成工具边界

给现有函数 save_note(path, text) 写一份安全重设计,不必接模型:

  1. 只允许写入可信应用注入的工作区;
  2. 模型只能提供相对路径和正文;
  3. 规定扩展名、路径穿越、reparse/symlink 风险和大小上限;
  4. 已存在文件默认拒绝覆盖,覆盖需要单独授权;
  5. 写入前提供预览,批准后才执行;
  6. 定义幂等、超时、原子写、取消和审计语义;
  7. 用临时目录测试,不修改真实 vault。

这项任务重点是契约和证据,不要求声称 Python 用户态检查构成绝对安全沙箱。

诊断题

1. 包安装成功但 import 失败

按顺序给出至少四个只读检查,必须包含 sys.executable、python -m pip --version、导入名称与分发包名称差异,以及当前工作目录的同名文件遮蔽。

2. 异步批处理偶发卡死

列出可能证据:阻塞同步调用、无底层超时、吞掉取消、无限创建任务、持锁等待、线程函数仍在运行。说明你会先测量哪一项,而不是直接增加并发。

3. 日志中出现 API key

立即停止进一步传播;确认哪些日志/备份/下游已接收;撤销和轮换凭据;按权限处理日志与 Git 历史;用结构化字段允许列表修复根因。仅新增 .gitignore 或字符串遮挡不能证明风险消除。

反例辨析

判断并修正:

  • “有类型提示,所以 JSON 一定安全。”
  • “所有 5xx 都重试三次即可。”
  • “asyncio 会让 CPU 计算自动并行。”
  • “覆盖率 100%,所以工具行为正确。”
  • “把工具描述写严格一些,就不需要权限检查。”
  • “pip freeze 就是完整的项目元数据和跨平台锁文件。”

最终掌握标准

可独立完成

  • 在 Windows 11 + PowerShell 7 创建、定位和重建 venv + pip 环境,再解释何时采用 uv。
  • 用函数、模块、类型提示和数据类表达边界,同时对不可信数据做运行时校验。
  • 用 pathlib、显式 UTF-8 和 json 可靠读写小型数据。
  • 设计具体异常、总时限、有限重试和资源清理。
  • 将配置、密钥、用户输出和诊断日志分开。
  • 用 unittest 覆盖成功、边界和失败路径,适度使用 fake/mock。
  • 在需要时实现有限异步并发,正确传播取消。
  • 设计可测试的 CLI 与 Agent 工具函数契约。

能说明边界

  • 不把本机 3.11 测试误称为 Python 3.14 已验证。
  • 不把标准库演示误称为真实 SDK、网络、权限或生产恢复已验证。
  • 能列出示例中尚未覆盖的供应链、部署、监控、模型评测和治理问题。
  • 遇到版本敏感 API 会核对当前官方文档和项目支持范围。

若仍有三项以上无法独立证明,回到相应条目重做练习,而不是继续堆叠框架 API。

下一步

参考资料

本页整合本路线各节的练习与掌握标准;版本性事实和具体 API 来源见各节参考资料。获取日期:2026-07-14。