第6章 文件与异常


第 6 章 · 文件与异常

章节摘要:程序与外部世界打交道就两件事——搬数据(文件 IO)与处理失敗(异常)。本章把 with 语句还原为 __enter__/__exit__ 协议,把异常还原为"携带栈帧的对象沿调用链上抛",再给出分类处理、自定义异常与清理动作的工程范式。

学习目标

阅读完本章,你应当能够:

  1. 用文本/二进制模式正确读写文件,显式指定编码;
  2. 说出 with 的协议本质,并给自己的类实现上下文管理器;
  3. 描述异常从抛出点到捕获点的传播路径,读懂 traceback;
  4. 按"具体在前、兜底在后"的规则组织 try/except,避免裸 except;
  5. 设计自定义异常层级,用异常组表达多重失败。

核心概念速览

with 的承诺只有一句话:无论体 内发生什么,退出路径必被调用。资源安全靠协议,不靠自觉。

子章节导航

6.1 文件操作与上下文管理

文本/二进制模式、编码显式化、逐行处理大文件、路径对象 pathlib,以及自定义上下文管理器。

6.2 异常处理的底层逻辑

异常对象与调用栈、try/except/else/finally 语义、异常链与再抛出、自定义异常设计。

子章节之间的逻辑关系

6.1 的 with 是 6.2 异常机制的第一个应用场景:资源清理本质上就是"异常路径上的收尾动作"。先讲应用再讲原理,回头看 with 协议里的 __exit__ 参数就完全透明了。

前置知识与后续延伸

  • 前置:第 2 章 bytes 与 str、第 4 章魔术方法。
    本章的现实检验方式很简单:翻出你以前写的任何一个"打开文件却不关、异常裸 except"的旧脚本,用 with 与分类捕获重写一遍。改完对比两版的行数不会差太多,但一版在异常路径上布满地雷,另一版在每条退出路径上都有收尾——这就是机制理解与语法记忆的差距。

  • 为后续铺垫:第 7 章生成器版的上下文管理器、第 8 章异步 IO 与取消异常、第 9 章网络请求的超时重试都大量使用本章范式。

作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U