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.pswp.cn/bicheng/91127.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache Ignite 的分布式队列(IgniteQueue)和分布式集合(IgniteSet)的介绍

以下的内容是关于 Apache Ignite 的分布式队列(IgniteQueue)和分布式集合(IgniteSet) 的介绍。它们是 Ignite 提供的分布式数据结构,让你可以在整个集群中像使用本地 BlockingQueue 或 Set 一样操作共享的数据。 下面我…

HTML5 `<figure>` 标签:提升网页语义化与可访问性的利器

目录什么是 <figure> 标签&#xff1f;为什么我们要用 <figure>&#xff1f;<figure> 标签的语法<figure> 标签的适用场景1 图片及其说明 (最常用)2 代码片段及其注释3 图表、流程图或数据可视化4 引用或引文 (Quote) 及其出处总结在现代网页开发中&am…

计算机网络五层模型

我们常说的“计算机网络五层协议模型”&#xff0c;是一个实际应用中广泛采用的简化模型&#xff08;介于OSI七层&#xff08;Open System Interconnect&#xff09;与TCP/IP四层之间&#xff09;&#xff0c;用于描述网络通信中各层的职责与作用。 文章目录第5层&#xff1a;应…

数据开源 | “白虎”数据集首批开源,迈出百万数据征途第一步

“白虎”数据集首批开源 在机器人智能不断迈向自主化、通用化的进程中&#xff0c;如何解决人形机器人的“喂养”难题、走出“数据荒漠”&#xff0c;已成为具身智能领域亟需攻克的关键课题。为此&#xff0c;2025 年初&#xff0c;全国首个异构人形机器人训练场在模力社区正式…

第17章——多元函数积分学的预备知识

文章目录思维导图场论初步方向导数梯度散度与旋度今日格言&#xff1a;如果凡事缺少了实行的勇气&#xff0c;再有智慧与仁爱也是枉然。思维导图 场论初步 场就是空间区域ΩΩΩ上的一种对应法则。可分为&#xff1a;数量场和向量场。 比如一个数量函数uu(x,y,z)uu(x,y,z)uu(x…

Vue》》Slot 插槽

插槽的概念 插槽就是子组件中的提供给父组件使用的一个占位符&#xff0c;用slot标签 表示&#xff0c;父组件可以在这个占位符中填充任何模板代码&#xff0c;如 HTML、组件等&#xff0c;填充的内容会替换子组件的slot标签。简单理解就是子组件中留下个“坑”&#xff0c;父组…

AKS部署.Net Shopping(K8S本地部署/AKS部署/key-value)

文章目录 项目地址 一、Api配置修改 1.1 配置docker 1. docker-compose配置环境变量 2. 修改appsettings 二、本地k8s部署 2.1 将本地镜像Push到dockerHub 2.2 制作K8S yaml文件 1. mogodb 2. shopping api 3. shoppingclient 3. port补充 4. Service 的type 三、部署到AKS 3.1…

vue3 el-table 去除小数

在 Vue 3 中使用 Element Plus 的 <el-table> 组件时&#xff0c;如果你希望去除表格列中的小数&#xff0c;你可以通过几种方式来实现&#xff1a;1. 使用 formatter 属性<el-table-column> 组件的 formatter 属性允许你自定义单元格的显示格式。你可以使用这个属…

JavaScript数组去重性能优化:Set与Object哈希表为何效率最高

文章目录 数组去重性能优化:为什么Set和Object哈希表的效率最高 引言 一、数组去重的常见方法 1.1 双重循环法 1.2 indexOf/includes方法 1.3 排序后相邻比较法 1.4 filter + indexOf方法 1.5 使用Set数据结构 1.6 使用Object哈希表 二、性能对比分析 2.1 时间复杂度对比 2.2 …

在VS Code中克隆项目失败

前提条件&#xff1a;电脑中已经安装好了Git一、错误原因&#xff1a;1、打开命令面板 快捷键 CtrlShiftP&#xff0c;输入Git: Clone 并回车&#xff1b;2、输入仓库URL回车后就发现报错了可以看到最后一行的报错内容&#xff1a;Git 无法找到或读取 SSL 证书文件&…

ASP.NET Core MVC中taghelper的ModelExpression详解

Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression 是 ASP.NET Core MVC 框架中的一个核心类型&#xff0c;用于表示对模型属性的强类型引用。它在 Razor 视图、表单绑定和自定义 Tag Helper 中扮演关键角色&#xff0c;下面从技术细节、应用场景和最佳实践三个方面详细解…

楼宇 3D 建模:驱动建筑领域革新的数字力量

在科技飞速发展的当下&#xff0c;数字化技术正深刻改变着各个行业&#xff0c;建筑领域也不例外。楼宇 3D 建模作为关键的数字化技术&#xff0c;逐渐成为建筑设计、施工和管理过程中不可或缺的工具。它通过将现实中的楼宇以三维数字模型呈现&#xff0c;为建筑行业带来前所未…

打通视频到AI的第一公里:轻量RTSP服务如何重塑边缘感知入口?

在 AI 系统大规模部署、设备边缘化、数据实时化趋势下&#xff0c;视频能力的部署方式正迎来深刻变革。2025世界人工智能大会&#xff08;WAIC&#xff09;上&#xff0c;视频感知与智能决策之间的“连接效率”成为关键话题。而在这场连接能力的竞争中&#xff0c;轻量级、标准…

旅行短视频模糊的常见原因及应对方法

在旅行中拍摄短视频时&#xff0c;你是否经常遇到这样的问题&#xff1a;明明景色很美&#xff0c;但拍出来的视频却模糊不清&#xff0c;色彩暗淡&#xff0c;甚至噪点严重&#xff1f;尤其是在弱光环境&#xff08;如夜景、洞穴&#xff09;或快速移动&#xff08;如航拍、运…

【基础篇四】ASGI:Python异步Web的新标准

目录 一、ASGI规范深度解析 1.1 ASGI的诞生背景 1.2 ASGI核心概念 1.3 ASGI规范版本演进 二、WSGI vs ASGI&#xff1a;深度对比分析 2.1 架构模式对比 2.2 性能特性对比 2.3 适用场景分析 三、ASGI支持的协议类型 3.1 HTTP协议支持 3.1.1 HTTP处理流程 3.2 HTTP S…

51 单片机单文件多文件结构工程模板的创建教程

本章将详细介绍KEIL C51软件的使用方法及51单片机工程的创建流程。通过本章学习&#xff0c;掌握建立51单片机工程模板的技能&#xff0c;为后续51 单片机编程学习奠定基础。 单文件与多文件结构对比 对比项单文件结构多文件结构项目规模小项目、实验项目中大型项目、正式开发…

【Git】实用Git操作指南:从入门到高效协作

目录 1. Git 工作流程图 2. 基本配置 3. 获取本地仓库 4. 基础操作 5. 分支 6. Git远程仓库 6.1 常用的托管服务[远程仓库] 6.2 注册码云 6.3创建远程仓库 6.4 配置SSH公钥 6.5 操作远程仓库 7. 在IDEA中使用Git 附&#xff1a;铁令 下载地址&#xff1a;Git - Downloads 安装&…

InstructBLIP:通过指令微调迈向通用视觉-语言模型

温馨提示&#xff1a; 本篇文章已同步至"AI专题精讲" InstructBLIP&#xff1a;通过指令微调迈向通用视觉-语言模型 摘要 大规模预训练和指令微调在构建通用语言模型方面取得了显著成功。然而&#xff0c;构建通用视觉-语言模型仍然面临挑战&#xff0c;这主要源于…

[python][flask]flask蓝图使用方法

在 Flask 中&#xff0c;蓝图&#xff08;Blueprint&#xff09;是一种用于组织和管理代码的机制&#xff0c;可以将应用分解为多个模块&#xff0c;每个模块专注于特定的功能。以下是使用蓝图的基本步骤和方法&#xff1a;1. 创建蓝图首先&#xff0c;需要创建一个蓝图对象。蓝…