下载工作台
Python 编程实战

文件读写与异常处理

试读上半部分 · 解锁后可读全文

第 8 章 · 文件与异常

本章目标:掌握 open() 读写文本与二进制文件;熟练使用 with 上下文管理器;理解 try/except/else/finally;能处理 shop-demo 订单日志与配置文件;了解路径拼接用 pathlib(与 ch09 os 互补)。

学时建议:3~4 小时(含 1 小时跟练)

前置ch05 函数;建议已完成 ch04 数据结构。


8.1 打开与关闭文件

# 不推荐:需手动 close
f = open("notes.txt", "w", encoding="utf-8")
f.write("第一行\n")
f.close()

# 推荐:with 自动关闭
with open("notes.txt", "a", encoding="utf-8") as f:
    f.write("追加一行\n")
模式说明
r只读(默认)
w写入,清空原文件
a追加
x新建,已存在则失败
b二进制,如 rbwb
+读写,如 r+

文本文件务必指定 encoding="utf-8",避免 Windows 默认编码问题。


8.2 读取方式

with open("catalog.txt", "r", encoding="utf-8") as f:
    content = f.read()           # 整个文件字符串

with open("catalog.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()        # 列表,每行含 \n

with open("catalog.txt", "r", encoding="utf-8") as f:
    for line in f:               # 大文件推荐,省内存
        print(line.strip())
方法适用
read()小文件
readline()逐行
迭代 for line in f大文件

8.3 写入与换行

rows = [
    "sku,title,price",
    "BK-001,Python 基础,59.9",
    "BK-002,Web 开发,79.0",
]

with open("products.csv", "w", encoding="utf-8", newline="") as f:
    f.write("\n".join(rows) + "\n")

Windows 写 CSV 时 newline="" 可避免多余空行(配合 csv 模块更佳,见 ch11)。


8.4 pathlib 路径(推荐)

from pathlib import Path

base = Path.home() / "python-learn" / "shop-demo"
base.mkdir(parents=True, exist_ok=True)

log_file = base / "logs" / "order.log"
log_file.parent.mkdir(parents=True, exist_ok=True)

if log_file.exists():
    text = log_file.read_text(encoding="utf-8")
操作pathlib
拼接Path("a") / "b"
存在.exists()
读文本.read_text(encoding="utf-8")
写文本.write_text(s, encoding="utf-8")

8.5 异常体系

try:
    price = float(user_input)
except ValueError:
    print("请输入合法数字")
except Exception as e:
    print("未知错误", e)
else:
    print("转换成功", price)
finally:
    print("清理资源(可选)")
子句执行时机
try可能出错的代码
except捕获指定异常
elsetry 无异常时
finally无论如何都执行

常见内置异常

异常典型原因
ValueError值不合法
TypeError类型不对
FileNotFoundError文件不存在
KeyError / IndexError键/下标
ZeroDivisionError除零
try:
    n = int("abc")
except ValueError as err:
    print(repr(err))

以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。