一、知识衔接:构建工业级应用能力
前五篇核心能力:
✅ 面向对象编程 ✅ 类与对象 ✅ 模块化设计 ✅ 项目架构
本篇新维度:
graph LR
A[OOP日记系统] --> B[异常处理]
A --> C[数据持久化]
B --> D[程序健壮性]
C --> E[JSON存储]
二、异常处理:让程序更稳定
1. 什么是异常?(新手友好解释)
-
现实比喻:就像开车时遇到的突发路况(如爆胎、没油)
-
程序表现:代码执行时遇到的意外错误(如文件找不到、除零错误)
# 典型异常场景
try:
num = int(input("请输入数字:")) # 用户输入字母会报错
except ValueError:
print("输入的不是有效数字!")
2. 异常处理模板(企业级写法)
class DiarySystem:
def save_to_file(self, content):
try:
with open("diary.json", "r+") as f:
# 文件操作代码...
except FileNotFoundError:
print("警告:日记文件不存在,已自动创建")
# 创建文件的补救措施...
except json.JSONDecodeError:
print("错误:日记文件损坏,请检查!")
finally:
print("存储流程执行完毕")
三、JSON数据持久化:专业存储方案
1. JSON格式的优势
-
数据结构友好:完美对应Python字典/列表
-
跨平台通用:所有编程语言都支持
-
人类可读:比普通文本更规范,比数据库更轻量
2. 核心方法对比
方法 | 作用 | 示例 |
---|---|---|
json.dump() | 将对象写入JSON文件 | json.dump(data, f) |
json.load() | 从文件加载JSON对象 | data = json.load(f) |
json.dumps() | 对象转JSON字符串 | s = json.dumps(data) |
json.loads() | 字符串转Python对象 | data = json.loads(s) |
3. 日记存储改造实战
import json
class DiarySystem:
def __init__(self, username):
self.username = username
self.file_path = f"{username}_diary.json"
self.__load_data() # 初始化时自动加载数据
def __load_data(self):
"""私有方法:加载数据"""
try:
with open(self.file_path, "r") as f:
self.data = json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
self.data = {"diaries": []}
def add_diary(self, content):
"""添加日记"""
new_entry = {
"time": datetime.now().strftime("%Y-%m-%d %H:%M"),
"content": content
}
self.data["diaries"].append(new_entry)
self.__save_data()
def __save_data(self):
"""私有方法:保存数据"""
with open(self.file_path, "w") as f:
json.dump(self.data, f, indent=2, ensure_ascii=False)
四、输入验证:防御式编程技巧
1. 日期格式验证
def validate_date(date_str):
try:
datetime.strptime(date_str, "%Y-%m-%d")
return True
except ValueError:
return False
# 在写入方法中添加验证
if not validate_date(input_date):
print("日期格式错误!应为YYYY-MM-DD")
2. 内容安全检查
def check_content(content):
forbidden_words = ["密码", "银行卡", "敏感词"]
for word in forbidden_words:
if word in content:
raise ValueError("日记包含敏感词!")
return True
try:
check_content(input_text)
except ValueError as e:
print(e)
五、综合实战:工业级日记本系统
class AdvancedDiarySystem:
def __init__(self, user):
self.user = user
self.system = DiarySystem(user.username)
def run(self):
while True:
print("\n1.写日记 2.读日记 3.导出备份 4.退出")
choice = input("请选择:")
try:
if choice == "1":
self.__write_diary()
elif choice == "2":
self.__read_diary()
elif choice == "3":
self.__export_backup()
elif choice == "4":
break
else:
print("输入无效选项")
except Exception as e:
print(f"操作失败:{str(e)}")
self.__log_error(e)
def __write_diary(self):
content = input("请输入日记内容:")
if len(content) < 10:
raise ValueError("日记内容至少10个字")
check_content(content) # 调用安全检查
self.system.add_diary(content)
print("保存成功!")
# 其他方法省略,完整代码见评论区资源
六、避坑指南
1. 常见JSON错误解决方案
-
中文字符乱码:
json.dump(data, f, ensure_ascii=False)
-
数据类型丢失:JSON不支持Python的datetime类型,需转换为字符串
2. 异常处理原则
-
具体异常优先:先捕获
FileNotFoundError
等具体异常 -
最后捕获Exception:兜底处理未知错误
-
记录错误日志:使用
logging
模块记录异常信息
学习路线建议
1. 今日实践任务
# 任务:给学生成绩管理系统添加异常处理
# 要求:
# - 输入非数字成绩时友好提示
# - 文件读写使用JSON格式
# - 添加数据备份功能
class GradeManager:
# 在之前类的基础上改造...
2. 调试技巧
# 打印完整错误信息
import traceback
try:
# 可能出错的代码
except:
traceback.print_exc()
📢 下期预告:Python自动化办公实战(Excel/Word/PDF处理)
💡 学完本篇你将能:开发出真正可投入使用的应用程序!