章节主张
一旦程序接触文件和用户数据,异常处理就不再是可选项,而是程序可靠性的底线。
中文释读
这章的价值在于,它把“程序不总会按你想的跑”这件事正式摆到台面上。文件路径、读取、写入、try-except、FileNotFoundError、文本分析和 JSON 保存,构成了初学者第一次接触持久化和容错设计的完整场景。你会慢慢明白,真正有用的程序不是永不出错,而是出错时仍能体面处理。
关键论点
- 文件让数据能跨运行周期保存。
- 异常处理决定程序面对真实环境时是否崩盘。
- JSON 是初学者理解结构化持久化的好桥梁。
行动清单
- 练熟 with、read、write 的最小文件操作流。
- 遇到潜在失败点时主动思考 try-except。
- 用 JSON 组织可复用的结构化数据。
源章节深读
第 10 章 ⽂件和异常 ⾄此,你已经掌握了编写整洁易⽤的程序所需的基本技能,该考虑让 程序⽬标更明确、⽤途更⼤了。在本章中,你将学习处理⽂件,让程 序能够快速地分析⼤量数据;你将学习错误处理,避免程序在⾯对意 外情况时崩溃;你将学习异常,它们是 Python 创建的特殊对象,⽤于 管理程序运⾏时出现的错误;你还将学习使⽤ json 模块保存⽤户数 据,以免这些数据在程序结束运⾏后丢失。 学习处理⽂件和保存数据能让你的程序更易于使⽤:⽤户能够选择输⼊什 么样的数据以及在什么时候输⼊;⽤户使⽤程序做完⼀些⼯作后,可先将 程序关闭,以后再接着往下做。学习处理异常可帮助你应对⽂件不存在等 情况,以及处理其他可能导致程序崩溃的问题。这让程序在⾯对错误的数 据时更稳健 —— 不管这些错误数据源⾃⽆意的错误,还是出于破坏程序的 恶意企图。你在本章学习的技能可提⾼程序的适⽤性、可⽤性和稳定性。 10.1 读取⽂件 ⽂本⽂件可存储的数据多得令⼈难以置信:天⽓数据、交通数据、社会经 济数据、⽂学作品,等等。每当需要分析或修改存储在⽂件中的信息时, 读取⽂件都很有⽤,对数据分析应⽤程序来说尤其如此。
10.1 读取文件
10.1 读取⽂件 ⽂本⽂件可存储的数据多得令⼈难以置信:天⽓数据、交通数据、社会经 济数据、⽂学作品,等等。每当需要分析或修改存储在⽂件中的信息时, 读取⽂件都很有⽤,对数据分析应⽤程序来说尤其如此。例如,可以编写 ⼀个程序来读取⽂本⽂件的内容,并且以新的格式重写该⽂件,让浏览器 能够显⽰。 要使⽤⽂本⽂件中的信息,⾸先需要将信息读取到内存中。既可以⼀次性 读取⽂件的全部内容,也可以逐⾏读取。 10.1.1 读取⽂件的全部内容 要读取⽂件,需要⼀个包含若⼲⾏⽂本的⽂件。
这节解决什么:这一节主要解决《第 10 章 文件和异常》里一个更具体的子问题:10.1 读取文件 该怎样落到实际代码或项目动作上。
怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。
提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。
10.2 写入文件
10.2 写⼊⽂件 保存数据的最简单的⽅式之⼀是将其写⼊⽂件。通过将输出写⼊⽂件,即 便关闭包含程序输出的终端窗⼝,这些输出也依然存在:既可以在程序结 束运⾏后查看这些输出,也可以与他⼈共享输出⽂件,还可以编写程序来 将这些输出读取到内存中并进⾏处理。 10.2.1 写⼊⼀⾏ 定义⼀个⽂件的路径后,就可使⽤ write_text() 将数据写⼊该⽂件了。
这节解决什么:这一节主要解决《第 10 章 文件和异常》里一个更具体的子问题:10.2 写入文件 该怎样落到实际代码或项目动作上。
怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。
提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。
10.3 异常
10.3 异常 Python 使⽤称为异常( exception )的特殊对象来管理程序执⾏期间发⽣的 错误。每当发⽣让 Python 不知所措的错误时,它都会创建⼀个异常对象。 如果你编写了处理该异常的代码,程序将继续运⾏;如果你未对异常进⾏ 处理,程序将停⽌,并显⽰⼀个 traceback ,其中包含有关异常的报告。 异常是使⽤ try-except 代码块处理的。
这节解决什么:这一节主要解决《第 10 章 文件和异常》里一个更具体的子问题:10.3 异常 该怎样落到实际代码或项目动作上。
怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。
提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。
10.4 存储数据
10.4 存储数据 很多程序要求⽤户输⼊某种信息,⽐如让⽤户存储游戏⾸选项或提供要可 视化的数据。不管专注点是什么,程序都会把⽤户提供的信息存储在列表 和字典等数据结构中。当⽤户关闭程序时,⼏乎总是要保存他们提供的信 息。⼀种简单的⽅式是使⽤模块 json 来存储数据。 模块 json 让你能够将简单的 Python 数据结构转换为 JSON 格式的字符 串,并在程序再次运⾏时从⽂件中加载数据。你还可以使⽤ json 在 Python 程序之间共享数据。
这节解决什么:这一节主要解决《第 10 章 文件和异常》里一个更具体的子问题:10.4 存储数据 该怎样落到实际代码或项目动作上。
怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。
提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。
10.5 小结
10.5 ⼩结 在本章中,你⾸先学习了如何使⽤⽂件,包括如何读取整个⽂件,如何读 取⽂件中的各⾏,以及如何根据需要将任意数量的⽂本写⼊⽂件。然后学 习了异常,以及如何处理程序可能引发的异常。最后,你学习了如何存储 Python 数据结构,以保存⽤户提供的信息,避免让⽤户在每次运⾏程序时 都重新提供。 在第 11 章中,你将学习⾼效的代码测试⽅式。这不仅能帮助你确定代码正 确⽆误,还有助于发现扩展既有程序时可能引⼊的 bug 。
这节解决什么:这一节主要解决《第 10 章 文件和异常》里一个更具体的子问题:10.5 小结 该怎样落到实际代码或项目动作上。
怎么用到自己的系统:不要只把它当书中的小节标题,最好把它改写成一个你能亲手运行、修改或调试的微练习。
提醒:常见误区是只看懂例子表面流程,却没有把这一节抽成自己能迁移的规则。
辨析题
为什么异常处理会被认为是程序成熟度的一部分?
因为成熟程序不是假装世界总是正常,而是承认文件缺失、输入错误和外部环境波动都会发生。