Python 8天极速入门笔记(大模型工程师专用):第七篇-文件操作 + 异常处理,大模型实战落地关键

一、开篇回顾 + 今日目标

开篇回顾

Day6 我们掌握了函数进阶(函数嵌套、lambda 匿名函数、可变参数)以及 Python 模块导入的核心用法,实现了大模型预处理工具的封装,完成了从简单函数到模块化代码的升级。而在实际大模型开发中,对话历史持久化存储、模型配置文件读写、本地知识库导入都离不开文件操作,同时程序运行中难免出现文件缺失、参数错误、网络波动等问题,异常处理能让脚本避免崩溃、提升容错性,这两项技能是大模型脚本从 "测试运行" 走向 "实战可用" 的核心必备能力。

今日目标

  1. 掌握 Python 文件操作核心:精通open()函数、with open()语法,实现 txt、json 文件的读、写、追加操作,适配大模型日志保存、配置读取、知识库导入场景;
  2. 熟练异常处理体系:掌握try-except基础捕获、else/finally进阶用法、raise主动抛异常,覆盖大模型开发常见异常场景;
  3. 结合大模型实战:封装配置读取、对话保存、历史查询一体化工具,实现文件操作与异常处理的综合应用;
  4. 梳理高频易错点,完成针对性练习,彻底规避中文乱码、文件覆盖、异常漏捕等问题。

二、核心知识点(大模型开发专属)

(一)文件操作基础

1. 核心概念与 open () 函数

文件操作是实现数据持久化的核心,Python 中通过内置open()函数操作文件,无需额外安装模块,是大模型开发存储对话、配置、知识库的基础手段。基础语法

复制代码
open(file, mode='r', encoding='utf-8')

关键参数说明

  • file:文件路径,支持相对路径(同文件夹)和绝对路径,大模型开发常用相对路径;

  • mode:文件打开模式,大模型场景高频 4 种模式: 表格

    模式 功能 适用场景
    r 只读模式(默认) 读取模型配置、知识库、历史对话
    w 只写模式(覆盖原有内容) 重新写入配置、清空日志
    a 追加模式(末尾添加) 持续保存对话历史,不覆盖旧数据
    r+ 读写模式 同时读取和修改文件内容
  • encoding:编码格式,必须指定 utf-8,避免中文乱码,大模型场景必用。

最佳实践 :使用with open()语句,无需手动关闭文件,系统自动释放资源,杜绝文件占用问题。

2. 常用文件操作(大模型实战示例)
(1)读取文件(配置 / 知识库读取)
复制代码
# 读取大模型JSON配置文件
import json

def read_model_config(config_path="model_config.json"):
    """读取大模型配置文件,返回配置字典"""
    try:
        with open(config_path, 'r', encoding='utf-8') as f:
            config = json.load(f)
        return config
    except FileNotFoundError:
        # 文件不存在时返回默认配置
        default_config = {"model": "qwen-7b", "temperature": 0.7, "max_tokens": 1024}
        return default_config

# 读取TXT格式知识库
def read_knowledge_base(kb_path="knowledge_base.txt"):
    """读取本地知识库,返回有效内容列表"""
    with open(kb_path, 'r', encoding='utf-8') as f:
        # 读取所有行,去除空行和换行符
        content = [line.strip() for line in f if line.strip()]
    return content
(2)写入 / 追加文件(对话日志保存)
复制代码
from datetime import datetime

# 写入JSON格式对话历史
def save_chat_history(chat_data, history_path="chat_history.json"):
    """保存单轮对话历史,追加模式不覆盖"""
    # 先读取原有历史
    try:
        with open(history_path, 'r', encoding='utf-8') as f:
            all_history = json.load(f)
    except (FileNotFoundError, json.JSONDecodeError):
        all_history = []
    
    # 添加时间戳
    chat_data["save_time"] = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    all_history.append(chat_data)
    
    # 写入文件
    with open(history_path, 'w', encoding='utf-8') as f:
        json.dump(all_history, f, ensure_ascii=False, indent=4)

# 追加TXT格式对话日志
def append_chat_log(user_input, ai_response, log_path="chat_log.txt"):
    """追加对话日志到txt文件,实时记录"""
    time_str = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    log_content = f"【{time_str}】用户:{user_input}\n【{time_str}】助手:{ai_response}\n\n"
    with open(log_path, 'a', encoding='utf-8') as f:
        f.write(log_content)

(二)异常处理

1. 核心概念

程序运行中出现的错误即为异常,如文件不存在、参数格式错误、网络超时等,若不处理会直接导致程序崩溃。Python 通过try-except语句捕获并处理异常,让大模型脚本更健壮,即使出错也能给出友好提示而非直接终止。

2. 异常处理完整语法
复制代码
try:
    # 可能出现异常的代码
    待执行的风险代码
except 具体异常类型1:
    # 对应异常的处理逻辑
    容错处理
except 具体异常类型2:
    # 多异常分别处理
    容错处理
else:
    # 无异常时执行的代码
    正常执行逻辑
finally:
    # 无论是否异常,必执行的代码
    资源释放、收尾操作

主动抛异常 :使用raise 异常类型("提示信息"),主动触发异常,用于参数校验、非法操作拦截。

3. 大模型高频异常处理示例
复制代码
# 模型参数校验+异常捕获
def check_model_params(temperature, max_tokens):
    """校验大模型参数,异常处理"""
    try:
        if not isinstance(temperature, (int, float)):
            raise TypeError("温度参数必须是数字")
        if not<= 1.0:
            raise ValueError("温度需在0-1.0之间")
        if max_tokens< 256:
            raise ValueError("最大tokens不能小于256")
        return True, "参数校验通过"
    except TypeError as e:
        return False, f"参数类型错误:{str(e)}"
    except ValueError as e:
        return False, f"参数值错误:{str(e)}"
    except Exception as e:
        return False, f"未知异常:{str(e)}"

# 文件操作异常捕获
def safe_read_file(file_path):
    """安全读取文件,覆盖常见文件异常"""
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()
        return True, content
    except FileNotFoundError:
        return False, "文件不存在,请检查路径"
    except UnicodeDecodeError:
        return False, "文件编码错误,请使用UTF-8编码"
    except Exception as e:
        return False, f"文件读取失败:{str(e)}"

(三)文件操作 + 异常处理综合实战

将文件操作与异常处理结合,封装大模型开发常用的配置管理 + 对话存储工具,实现全流程容错,直接可用于实战开发。

复制代码
import json
from datetime import datetime

# 大模型文件操作工具类
class ModelFileTool:
    def __init__(self, config_path="model_config.json", history_path="chat_history.json"):
        self.config_path = config_path
        self.history_path = history_path
    
    # 加载模型配置
    def load_config(self):
        try:
            with open(self.config_path, 'r', encoding='utf-8') as f:
                return json.load(f)
        except Exception:
            # 异常时初始化默认配置并保存
            default_config = {"model": "qwen-7b", "temperature": 0.7, "max_tokens": 1024}
            with open(self.config_path, 'w', encoding='utf-8') as f:
                json.dump(default_config, f, ensure_ascii=False, indent=4)
            return default_config
    
    # 保存对话历史
    def save_chat(self, user_msg, ai_msg):
        chat_data = {
            "user": user_msg,
            "ai": ai_msg,
            "time": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        }
        try:
            with open(self.history_path, 'r', encoding='utf-8') as f:
                history = json.load(f)
        except:
            history = []
        history.append(chat_data)
        with open(self.history_path, 'w', encoding='utf-8') as f:
            json.dump(history, f, ensure_ascii=False, indent=4)
        return "对话保存成功"

三、今日实操(代码可直接复制运行)

实操 1:模型配置文件读写 + 异常处理

复制代码
# 实操1:创建、读取、修改模型配置
import json

def operate_model_config():
    # 1. 初始化配置
    config = {"model": "chatglm3-6b", "temperature": 0.8, "max_tokens": 512}
    # 2. 写入配置文件
    with open("model_config.json", "w", encoding="utf-8") as f:
        json.dump(config, f, ensure_ascii=False, indent=4)
    print("配置文件创建成功")
    
    # 3. 读取并修改配置
    try:
        with open("model_config.json", "r", encoding="utf-8") as f:
            new_config = json.load(f)
        new_config["temperature"] = 0.6
        with open("model_config.json", "w", encoding="utf-8") as f:
            json.dump(new_config, f, ensure_ascii=False, indent=4)
        print("配置修改成功,新配置:", new_config)
    except Exception as e:
        print("配置操作失败:", e)

operate_model_config()

实操 2:对话历史保存 + 异常捕获

复制代码
# 实操2:模拟大模型对话,保存历史并处理异常
def chat_and_save():
    # 初始化工具
    tool = ModelFileTool()
    # 加载配置
    config = tool.load_config()
    print("当前使用模型:", config["model"])
    
    # 模拟对话
    user_input = input("请输入问题:")
    # 参数校验
    is_valid, msg = check_model_params(config["temperature"], config["max_tokens"])
    if not is_valid:
        print(msg)
        return
    # 模拟响应
    ai_response = f"基于{config['model']}的回答:您的问题是{user_input}"
    print("助手:", ai_response)
    # 保存对话
    save_result = tool.save_chat(user_input, ai_response)
    print(save_result)

chat_and_save()

实操 3:知识库文件读取 + 容错处理

复制代码
# 实操3:读取本地知识库,过滤无效内容
def read_knowledge_safe():
    file_path = "knowledge_base.txt"
    # 先创建测试文件
    with open(file_path, "w", encoding="utf-8") as f:
        f.write("什么是大模型\n")
        f.write("大模型参数调优方法\n")
        f.write("RAG技术实战应用\n")
    
    # 安全读取
    success, content = safe_read_file(file_path)
    if success:
        print("知识库内容:")
        for idx, line in enumerate(content.split("\n"), 1):
            if line:
                print(f"{idx}. {line}")
    else:
        print(content)

read_knowledge_safe()

四、易错点汇总(新手必避坑)

  1. 中文乱码问题 :文件操作未指定encoding='utf-8',导致中文显示乱码,大模型场景所有文件读写必须加该参数;
  2. 文件覆盖丢失 :误用w模式追加数据,覆盖原有历史日志,持续保存数据必须用a模式;
  3. 异常捕获滥用 :仅用except:捕获所有异常,隐藏未知错误,无法定位问题,建议捕获具体异常类型;
  4. 文件未关闭 :不用with open()且忘记调用close(),导致文件被占用,无法二次操作;
  5. JSON 格式错误 :写入 JSON 文件时数据格式不规范,读取时触发JSONDecodeError,需保证写入数据为字典 / 列表格式;
  6. 路径错误 :文件路径写错,触发FileNotFoundError,同文件夹文件直接写文件名,无需加多余路径;
  7. 参数异常漏判:模型参数未校验,传入非数字、超出范围,导致后续程序报错。

五、今日练习(10 分钟快速巩固)

  1. 编写函数,创建一个大模型配置文件ai_config.json,包含模型名称、温度、max_tokens 参数,读取并打印配置;
  2. 编写函数,实现对话日志追加功能,输入用户问题和模型响应,自动追加到chat_log.txt,添加时间戳;
  3. 给上述两个函数添加异常处理,捕获文件不存在、编码错误、参数类型错误等异常;
  4. 综合练习:封装一个完整脚本,实现 "加载配置→模拟对话→保存历史→读取历史" 全流程,全程异常处理。

六、次日预告

Day8 将学习 Python列表 / 字典高级用法数据过滤、排序、遍历优化 ,针对大模型开发中的对话历史管理、批量 prompt 处理、知识库数据筛选进行专项实战,让大模型数据处理更高效,为后续批量调用大模型 API 打下坚实基础!

相关推荐
踩着两条虫2 小时前
AI驱动的Vue3应用开发平台深入探究(二十五):API与参考之Renderer API 参考
前端·javascript·vue.js·人工智能·低代码·前端框架·ai编程
T0uken2 小时前
【Python】uvpacker:跨平台打包 Windows 应用
开发语言·python
Li emily2 小时前
解决了用美股历史数据api分析价格波动的困扰
数据库·人工智能·python
Xpower 172 小时前
PHM念叨叨系列--工业场景大模型幻觉治理
人工智能·python·语言模型
请数据别和我作队2 小时前
基于 DeepSeek API 的 ASR 文本纠错脚本实战:Python 多线程批量处理 JSONL 语音转写数据
开发语言·经验分享·python·自然语言处理·nlp
Circ.3 小时前
文本相似性对比python代码
开发语言·python·相似度
Ahtacca3 小时前
基于决策树算法的动物分类实验:Mac环境复现指南
python·算法·决策树·机器学习·ai·分类
萌>__<新3 小时前
AI聊天助手-测试报告
人工智能·python
KC2703 小时前
OpenAkita 深度解析:开源多Agent协作框架的实战指南
人工智能·aigc·ai编程