深学 DeepLearn纯静态学习平台 · 借鉴 DeepTutor

4. 实战:文件、异常与标准库

用 with 安全读写文件、用 try/except 接住错误,再把 JSON 与 pathlib 组合成一个真实小脚本。

约 10 分钟3 道测验 6 张抽认卡

读写文件:with 是标准姿势

with open('notes.txt', 'w', encoding='utf-8') as f:
    f.write('今天学完了 Python 四章\n')

with open('notes.txt', 'r', encoding='utf-8') as f:
    for line in f:
        print(line.strip())

离开 with 代码块,文件自动关闭——哪怕中间抛了异常。永远写 encoding='utf-8',Windows 下默认编码是坑。

异常处理:优雅地接住错误

def parse_score(text):
    try:
        return int(text)
    except ValueError:
        print(f'「{text}」不是合法分数,按 0 分处理')
        return 0
    finally:
        print('(本次解析结束)')

原则:精确捕获、给出出路。except: 后面裸 pass 是大忌——真正的错误会被悄悄吞掉。

实战小脚本:统计学习笔记

把本章的知识全部用上——统计 content 目录里每条学习线的章节数,并导出 JSON:

from pathlib import Path
import json

root = Path('content')
result = {}

for track_dir in root.iterdir():
    if track_dir.is_dir():
        md_files = sorted(track_dir.glob('*.md'))
        result[track_dir.name] = len(md_files)

print(json.dumps(result, ensure_ascii=False, indent=2))
# {"ai": 4, "frontend": 4, "python": 4, "cs": 3}

Path('stats.json').write_text(
    json.dumps(result, ensure_ascii=False, indent=2), encoding='utf-8'
)

短短十行用到了:pathlib 遍历目录、glob 匹配文件、json 序列化、dict 组织数据——这就是 Python 的日常形态。

虚拟环境:装库不污染全局

python -m venv .venv          # 创建
source .venv/bin/activate     # 激活(Windows 用 .venv\Scripts\activate)
pip install requests          # 装在项目自己的环境里

💡 练习任务:把上面的统计脚本扩展成「统计每条线总共多少道测验题」——提示:解析 frontmatter 可以用第三方库 python-frontmatter。

✍️章节测验(3 题)

选好后点击提交,成绩会记录到数据库,帮你追踪掌握情况。

  1. 1. 用 with open(...) as f: 读文件,相比手动 open 后 close,好处是?

  2. 2. 处理「用户输入的可能不是数字」这类可预期错误,正确的姿势是?

  3. 3. json.loads 与 json.dumps 的分工是?

进度加载中…