文件、输入输出与异常处理
这篇想把三个经常一起出现的主题放在一页里:
- 怎么读输入、写输出
- 怎么安全地处理文件
- 出错时怎么让程序更稳一些
标准输入输出
最基础的输入是 input():
name = input("name: ")
age = int(input("age: "))
print(name, age)
如果是一行多个值,通常配合 split() 和 map():
x, y = map(int, input().split())
更完整的读入模式可以直接看这篇速查:
文件读写
读取文本文件
最推荐的写法是 with open(...),这样文件会自动关闭:
with open("notes.txt", "r", encoding="utf-8") as f:
content = f.read()
按行读取
with open("notes.txt", "r", encoding="utf-8") as f:
for line in f:
print(line.rstrip())
写入文件
lines = ["alpha", "beta", "gamma"]
with open("out.txt", "w", encoding="utf-8") as f:
f.write("\n".join(lines))
常见模式:
"r":读"w":写,会覆盖原内容"a":追加"rb"/"wb":二进制模式
JSON 的基本处理
如果是结构化数据,优先考虑 json 模块:
import json
data = {"name": "alice", "score": 95}
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
with open("data.json", "r", encoding="utf-8") as f:
loaded = json.load(f)
异常处理
为什么要处理异常
很多错误并不是“代码写错了”,而是运行环境不满足预期:
- 文件不存在
- 用户输入不是数字
- 字典里没有这个键
- 网络请求失败
这时不要假装程序永远不会错,而是明确处理你预期中的异常。
try / except / else / finally
try:
value = int(input("number: "))
except ValueError:
print("请输入整数")
else:
print("读取成功", value)
finally:
print("这一段总会执行")
只捕获你真的想处理的异常
不推荐一上来就写:
try:
...
except Exception:
...
这会把很多本来应该暴露出来的问题也吞掉。更稳妥的做法是优先写具体异常类型,例如:
try:
with open("missing.txt", "r", encoding="utf-8") as f:
print(f.read())
except FileNotFoundError:
print("文件不存在")