当前位置: 首页 > news >正文

Day 25:异常处理

Day 25: Python异常处理机制

Review

上一节主要是熟悉ospython中的文件操作,包含:

  • 基础操作:目录获取、文件列举、路径拼接
  • 系统交互:环境变量管理、跨平台兼容性
  • 高级功能:目录树遍历、文件系统分析

Today

今天专注于Python的异常处理机制。在借助AI写代码时,经常会遇到try-except的异常处理模块。这是因为大部分大模型在后训练阶段都经过强化学习训练,为了确保结果的正确运行,采用try-except异常处理能提高模型运行成功的概率。

异常处理机制概述

Python的异常处理机制为程序提供了强大的容错能力(fault tolerance)。当程序在运行时遇到意外情况(即异常),它不会直接崩溃,而是可以被设计成优雅地处理这些错误。

当异常发生时,Python会创建一个异常对象(exception object)。如果这段可能出错的代码位于try语句块中,程序流程会寻找并跳转到匹配的except语句块来处理这个异常。

常见的Python异常类型

1. SyntaxError(语法错误)

  • 原因:代码不符合Python的语法规则,解释器在解析代码时就会失败
  • 特点:在程序运行之前就会被检测到
# 示例:缺少冒号
# def my_function()
#     print("Hello")

2. NameError(名称错误)

  • 原因:尝试使用一个未被定义的变量、函数或对象
# print(some_undefined_variable)  # 变量未定义

3. TypeError(类型错误)

  • 原因:对不支持该操作的数据类型执行了某个操作
# print("Age: " + 25)  # 字符串和整数不能直接相加

4. ValueError(值错误)

  • 原因:函数接收到的参数类型正确,但其值不合适
# number = float("12.34.56")  # 不是有效的浮点数表示

5. IndexError(索引错误)

  • 原因:尝试访问序列中不存在的索引
# data = ("apple", "banana")
# print(data[2])  # 索引超出范围

6. KeyError(键错误)

  • 原因:尝试访问字典中不存在的键
# student_grades = {"math": 90, "science": 85}
# print(student_grades["history"])  # 键不存在

7. AttributeError(属性错误)

  • 原因:尝试访问对象没有的属性或方法
# a_string = "hello"
# print(a_string.length)  # 应该用 len(a_string)

8. ZeroDivisionError(除零错误)

  • 原因:尝试将数字除以零
# result = 10 / 0

9. FileNotFoundError(文件未找到错误)

  • 原因:尝试打开不存在的文件或路径不正确
# import pandas as pd
# data = pd.read_csv("nonexistent.csv")

10. ModuleNotFoundError(模块未找到错误)

  • 原因:尝试导入不存在的模块
# import nonexistent_module

错误信息的解读

当代码出现错误时,程序会打印出"traceback"(回溯信息),包含:

  1. 错误类型(如NameError, TypeError)
  2. 错误发生的文件名和行号
  3. 导致错误的代码行
  4. 错误的简要描述

try-except基本用法

# 基本结构
try:# 可能会引发异常的代码result = numerator / denominator
except ZeroDivisionError:# 当发生除零错误时执行print("错误:除数不能为零!")result = "未定义"

捕获多种异常

def safe_divide(a, b):try:result = a / bexcept ZeroDivisionError:print("错误:除数不能为零!")return Noneexcept TypeError:print("错误:输入必须是数字!")return Noneelse:# 只有当try块成功执行时才会执行print(f"计算成功,结果是: {result}")return result

try-except-else-finally完整结构

try:# 可能引发异常的代码file = open('data.txt', 'r')data = file.read()
except FileNotFoundError:# 处理文件不存在的情况print("文件未找到")data = None
else:# try成功时执行print("文件读取成功")process_data(data)
finally:# 无论如何都会执行(清理资源)if 'file' in locals() and not file.closed:file.close()print("文件已关闭")

finally在ML/DL项目中的应用

finally子句的"保证执行"特性在机器学习和深度学习项目中特别重要:

  1. 日志文件管理:确保训练日志被正确保存
  2. 计算资源释放:GPU内存、分布式计算资源的释放
  3. 数据库连接关闭:避免连接泄漏
  4. 全局状态恢复:恢复修改过的配置或环境变量
  5. 检查点保存:训练中断时保存模型状态
# ML训练示例
try:model = load_model()model.train(epochs=100)
except KeyboardInterrupt:print("训练被中断")
except RuntimeError as e:print(f"训练错误: {e}")
else:print("训练成功完成")save_final_model(model)
finally:# 无论如何都要执行的清理工作save_checkpoint(model)release_gpu_memory()close_tensorboard_writer()

最佳实践建议

  1. 具体化异常类型:避免使用裸露的except,应指定具体的异常类型
  2. 记录错误信息:在except块中记录详细的错误信息,便于调试
  3. 适度使用:不要过度使用异常处理来控制正常的程序流程
  4. 资源管理:优先使用with语句进行资源管理,它隐式使用了finally机制

小结

异常处理是Python编程的重要组成部分。通过合理使用try-except-else-finally结构,我们可以:

  • 提高程序的健壮性和用户体验
  • 优雅地处理各种错误情况
  • 确保资源被正确释放
  • 在ML/DL项目中构建更稳定的训练流程

浙大疏锦行

http://www.lryc.cn/news/603821.html

相关文章:

  • VTK开发笔记(一):VTK介绍,Qt5.9.3+VS2017x64+VTK8.2编译
  • Zynq SOC FPGA嵌入式裸机设计和开发教程自学笔记:GPIO扩展与中断控制技术,万字详解!!
  • 车载刷写架构 --- 整车刷写中为何增加了ECU 队列刷写策略?
  • 服务器分布式的作用都有什么?
  • Windows下基于 SenseVoice模型的本地语音转文字工具
  • Ubuntu25.04轻量虚拟机Multipass使用Shell脚本自动创建并启动不同版本Ubuntu并复制文件
  • 【支持Ubuntu22】Ambari3.0.0+Bigtop3.2.0——Step1—基础环境准备
  • GaussDB 约束的语法
  • 【LeetCode】前缀表相关算法
  • 服务器数据恢复—RAID上层部署的oracle数据库数据恢复案例
  • Node.js 是怎么一步步撼动PHP地位的
  • #C语言——学习攻略:深挖指针路线(三)--数组与指针的结合、冒泡排序
  • 云原生MySQL Operator开发实战(四):测试策略与生产部署
  • 什么情况下会出现数据库和缓存不一致的问题?
  • PowerShell脚本自动卸载SQL Server 2025和 SSMS
  • 传媒行业视频制作:物理服务器租用是隐藏的效率引擎
  • 基于Coze平台的自动化情报采集与处理引擎—实现小红书图文到飞书的端到端同步
  • MySQL数据库 mysql常用命令
  • 堆的理论知识
  • 青少年软件编程图形化Scratch等级考试试卷(一级)2025年6月
  • 人工智能赋能社会治理:深度解析与未来展望
  • 不靠海量数据,精准喂养大模型!上交Data Whisperer:免训练数据选择法,10%数据逼近全量效果
  • 光环云在2025WAIC联合发布“AI for SME 全球普惠发展倡议”
  • docker的安装和配置流程
  • 【监控】非IP监控系统改造IP监控系统
  • [Token]ALGM: 基于自适应局部-全局token合并的简单视觉Transformer用于高效语义分割, CVPR2024
  • docker docker与swarm入门笔记
  • Python中的决策树机器学习模型简要介绍和代码示例(基于sklearn)
  • Unity_SRP Batcher
  • 谷歌采用 Ligero 构建其 ZK 技术栈