掌握【Python异常处理】:打造健壮代码的现代编程指南
目录
编辑
1. 什么是异常?
知识点
示例
小李的理解
2. 常见的内置异常类型
知识点
示例
小李的理解
3. 异常机制的意义
知识点
示例
小李的理解
4. 如何处理异常
知识点
示例
小李的理解
5. 抛出异常
知识点
示例
小李的理解
6. Python内置异常类
知识点
示例编辑
小李的理解
7. 自定义异常类
知识点
示例
小李的理解
结论
专栏:python学习笔记
上一篇:Python文件操作
异常处理是编程中确保代码健壮性和无错误的关键方面。在本文中,我们将详细探讨Python异常处理的关键概念,每一步都分点详解,提供完整的代码示例和解析。
1. 什么是异常?
知识点
异常是在程序执行过程中发生的错误。当程序遇到无法处理的情况时,会生成异常。如果这些异常没有被捕捉并处理,程序将终止执行。Python中的异常处理机制允许程序捕捉这些异常,并采取适当的行动,以避免程序崩溃。
异常的种类有很多,例如:
- SyntaxError:语法错误,是在编写代码时违反了Python的语法规则。
- IndexError:试图访问超出列表范围的索引时引发。
- IOError:输入/输出操作失败,例如试图打开不存在的文件。
示例
# 示例代码1:语法错误
Print('hello world') # 语法错误,正确的写法是print('hello world')
这个例子展示了一个简单的语法错误,使用了大写的Print
而不是正确的print
。Python解释器检测到语法错误后,抛出SyntaxError
异常并终止程序。
小李的理解
异常就像是程序运行中的“红灯”,某个地方出错了,需要修正才能继续。就像在开车时遇到红灯需要停下来一样,程序在遇到异常时也会停下来,提示我们检查并修正错误。
2. 常见的内置异常类型
知识点
Python有许多内置异常类型,用于处理不同类型的错误。了解这些常见的异常类型有助于编写更加健壮的代码。
- SyntaxError:语法错误。
- IndexError:索引超出范围。
- IOError:输入/输出操作失败。
每种异常都有其特定的用途和触发条件。下面我们将通过示例代码详细了解每种异常的触发条件和处理方法。
示例
# 示例代码2:索引错误
a = [1, 2, 3]
print(a[100]) # 尝试访问列表中不存在的索引
这个例子展示了当试图访问超出列表范围的索引时会发生什么。这里,我们试图访问列表a
中的第100个元素,但a
只有3个元素,因此Python抛出IndexError
异常。
小李的理解
这些内置异常就像不同类型的“红灯”,告诉我们具体出错的地方,比如“索引超出范围”就像是访问了不存在的地址。了解这些异常可以帮助我们快速定位和修正代码中的错误。
3. 异常机制的意义
知识点
异常处理机制的主要目的是将正常逻辑和错误处理逻辑分离。这种分离提高了代码的可读性和维护性。
在没有异常处理机制的编程语言中,错误处理通常通过返回值来实现。这会导致代码混乱,因为每个函数调用后都需要检查返回值。Python的异常处理机制通过使用try
、except
等关键字,使得错误处理更加直观和简洁。
示例
# C语言示例:混合错误处理和正常逻辑
int fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd < 0) {perror("socket");return 1;
}
int ret = bind(fd, (struct sockaddr*)&addr, sizeof(addr));
if (ret < 0) {perror("bind");return 1;
}
ret = listen(fd, 10);
if (ret < 0) {perror("listen");return 1;
}
# Python示例:异常处理机制
try:sock = socket(AF_INET, SOCK_STREAM)sock.bind(ADDR)sock.listen(5)
except:print('error') # 可以进行其他复杂的处理
这个例子展示了C语言和Python在处理错误时的不同。C语言中,每个函数调用后都需要检查返回值并处理错误,这会导致代码混乱。相比之下,Python通过异常处理机制,可以将正常逻辑和错误处理逻辑分离,使代码更简洁易读。
小李的理解
异常处理机制就像是把“红灯”处理逻辑分开,让我们专注于主要任务而不是处理错误。这样,我们的代码就像是一条清晰的道路,没有错误处理的干扰,使得主要逻辑更加清晰和易于维护。
4. 如何处理异常
知识点
在Python中,异常处理使用try
、except
、else
和finally
关键字。通过这些关键字,可以捕捉并处理异常,使程序能够在出现错误时继续运行。
- try:包裹可能引发异常的代码块。
- except:处理异常的代码块。
- else:可选代码块,如果没有异常发生则执行。
- finally:可选代码块,无论是否有异常都会执行,用于清理资源。
示例
# 示例代码4:基本异常处理
try:a = [1, 2, 3]print(a[100])
except IndexError as e:print(f"发生了索引错误: {e}")
else:print("没有错误发生")
finally:print("执行完毕")
在这个例子中,我们使用try
块包裹可能引发异常的代码。except
块捕捉并处理IndexError
异常。如果没有发生异常,else
块中的代码会被执行。无论是否发生异常,finally
块中的代码都会被执行。
小李的理解
try
块就像是试探性的操作,except
块是处理“红灯”的地方,else
块是顺利通行时的处理,finally
块是无论如何都要完成的扫尾工作。这样,我们可以确保无论发生什么,程序都能安全地完成必要的清理工作。
5. 抛出异常
知识点
在某些情况下,我们需要在程序中主动抛出异常。可以使用raise
关键字显式抛出异常。自定义异常可以帮助识别特定的错误情况。
示例
# 示例代码5:抛出和捕获自定义异常
class CustomError(Exception):passdef divide(x, y):if y == 0:raise CustomError('除数不能为零')return x / ytry:result = divide(1, 0)
except CustomError as e:print(f"错误: {e}")
else:print(f"结果是: {result}")
在这个例子中,我们定义了一个自定义异常CustomError
,并在divide
函数中使用raise
关键字主动抛出这个异常。当y
为零时,会抛出CustomError
异常,并在except
块中捕捉并处理。
小李的理解
raise
关键字就像是自己设置“红灯”,以便在特定情况下发出警报。通过定义自定义异常,我们可以更好地控制程序中的特定错误情况,并提供有意义的错误信息。
6. Python内置异常类
知识点
Python提供了一系列内置异常类,这些异常类都继承自Exception
类。了解这些异常类及其用途,可以帮助我们更好地处理各种错误情况。
- ArithmeticError:数值计算错误的基类。
- LookupError:查找失败错误的基类。
- ValueError:函数接收到参数类型正确但值不合适时引发。
示例
在这个例子中,我们尝试将字符串'hello'
转换为整数,这会引发ValueError
异常。except
块捕捉并处理这个异常,并打印出错误信息。
小李的理解
内置异常类是Python给我们的工具箱,用来处理各种常见的“红灯”情况。了解这些异常类的用途,可以帮助我们更快速地定位和修正代码中的错误。
7. 自定义异常类
知识点
通过继承Exception
类,我们可以创建自定义的异常类,用于处理特定的错误条件。这种方法使我们能够定义特定的错误类型,并在需要时抛出和捕捉这些错误。
示例
# 示例代码7:自定义异常类
class NegativeNumberError(Exception):def __init__(self, value):self.value = valuedef square_root(x):if x < 0:raise NegativeNumberError(f"不能对负数求平方根: {x}")return x ** 0.5try:result = square_root(-1)
except NegativeNumberError as e:print(e)
else:print(f"结果是: {result}")
在这个例子中,我们定义了一个自定义异常类NegativeNumberError
,并在square_root
函数中使用raise
关键字主动抛出这个异常。当x
为负数时,会抛出NegativeNumberError
异常,并在except
块中捕捉并处理。
小李的理解
自定义异常类是我们自己的“红灯”,用来标记特定的错误情况,让我们可以更准确地处理问题。通过定义自定义异常,我们可以为程序添加更多的逻辑检查和错误处理机制,从而提高代码的健壮性和可维护性。
结论
通过逐步了解和实现Python中的异常处理机制,可以确保程序的健壮性和可维护性。使用try
、except
、else
和finally
块,可以编写出清晰且可维护的代码,有效管理错误。
相关文章:

掌握【Python异常处理】:打造健壮代码的现代编程指南
目录 编辑 1. 什么是异常? 知识点 示例 小李的理解 2. 常见的内置异常类型 知识点 示例 小李的理解 3. 异常机制的意义 知识点 示例 小李的理解 4. 如何处理异常 知识点 示例 小李的理解 5. 抛出异常 知识点 示例 小李的理解 6. Python内置…...

STM32点灯闪烁
stm32c8t6引脚图 开发板引脚图 GPIO端口的每个位可以由软件分别配置成 多种模式。 ─ 输入浮空 ─ 输入上拉 ─ 输入下拉 ─ 模拟输入 ─ 开漏输出 ─ 推挽式输出 ─ 推挽式复用功能 ─ 开漏复用功能 配置GPIO端口步骤:开启时钟->使用结构体设置输出模式…...

Java-01-源码篇-04集合-05-SortedMap NavigableMap TreeMap
目录 一,SortedMap 二,NavigableMap 三,TreeMap 3.1 TreeMap 继承结构 3.2 TreeMap 属性 3.3 TreeMap 构造器 3.4 TreeMap 内部类 3.4.1 Values 3.4.2 KeySet 3.4.3 EntrySet 3.4.5 相关集合迭代器 3.4.5.1 PrivateEntryIterato…...

拥抱 AGI:PieDataCS 引领云原生数据计算系统新范式
自2023年后,人工智能技术进入了一个更为成熟和广泛应用的阶段,人工通用智能(AGI)这一概念也成为了科技界和产业界热议的焦点。本文将结合 AGI 时代背景,从架构设计到落地实践,详细介绍拓数派云原生数据计算…...

开放式耳机哪个品牌好?开放式耳机推荐
开放式耳机因其独特的设计,提供了更自然的听音体验和更好的环境声音感知,尤其适合长时间佩戴和户外运动使用,下面来推荐几款表现出色的开放式耳机: 悠律ringbuds pro凝声环(499元):凭借时尚潮流…...

kubernetes dashboard安装
1.查看符合自己版本的kubernetes Dashboard 比如我使用的是1.23.0版本 https://github.com/kubernetes/dashboard/releases?page5 对应版本 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml修改对应的yaml,…...

【MySQL】3.表的操作
表的操作 一.创建表二.查看表三.修改表四.删除表 一.创建表 create table [if not exists] tb_name( field1 datatype comment 说明, field2 datatype, field3 datatype) charsetutf8 collateutf8_gerenal_ci engineInnoDB//表的编码集,校验集如果不指定ÿ…...

十一、作业
1.从大到小输出 写代码将三个整数数按从大到小输出。 void Swap(int* px, int* py) {int tmp *px;*px *py;*py tmp;} int main() {int a 0;int b 0;int c 0;scanf("%d %d %d", &a, &b, &c);int n 0;if (a<b){Swap(&a, &b);}if (a &l…...

关于C#在WPF中如何使用“抽屉”控件
关于C#在WPF中如何使用“抽屉”控件 1.前提准备2.XAML代码3.对应的C#代码4.显示效果 1.前提准备 需要引用MaterialDesign控件库,关于如何引用,请参照文章——关于C#如何引用MaterialDesign控件库 2.XAML代码 <Window x:Class"MaterialDesign_…...

运维Tips | Ubuntu 24.04 安装配置 xrdp 远程桌面服务
[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] Ubuntu 24.04 Desktop 安装配置 xrdp 远程桌面服务 描述:Xrdp是一个微软远程桌面协议(RDP)的开源实现,它允许我们通过图形界面控制远程系统。这里使…...

ExcelVBA运用Excel的【条件格式】(二)
ExcelVBA运用Excel的【条件格式】(二) 前面知识点回顾 1. 访问 FormatConditions 集合 Range.FormatConditions 2. 添加条件格式 FormatConditions.Add 方法 语法 表达式。添加 (类型、 运算符、 Expression1、 Expression2) 3. 修改或删除条件…...

肠道和大脑中犬尿氨酸代谢途径的紊乱
新出现的证据表明,肠道微生物群可能与宿主大脑相互作用,并在神经精神疾病的发病机制中发挥关键作用。然而,抑郁症中微生物-肠-脑轴相互作用的潜在机制仍不清楚。在这项研究中,建立了慢性约束应激 (CRS) 的小鼠模型,以研…...

vue通过后台返回的数字显示不同的文字内容,多个内容用、隔开
后台返回的数据 显示效果: html: <el-table-columnalign"center"label"使用过的小程序"width"124"v-if"activeTab 0"><template #default"scope"><divv-for"(item, index) in s…...

Flume工具详解
Flume是一个由Apache提供的开源日志收集系统,最初由Cloudera贡献。它以其高可用性、高可靠性和分布式特性而著称,被广泛应用于海量日志的采集、聚合和传输。以下是对Flume工具的详细解析: 一、概述 功能定位:Flume主要用于收集、…...

vulhub-activemq(CVE-2016-3088)
在 Apache ActiveMQ 5.12.x~5.13.x 版本中,默认关闭了 fileserver 这个应用(不过,可以在conf/jetty.xml 中开启);在 5.14.0 版本后,彻底删除了 fileserver 应用。【所以在渗透测试过程中要确定好 ActiveMQ …...

上海市计算机学会竞赛平台2024年6月月赛丙组超级奇数
题目描述 如果一个十进制数的所有数字都是奇数,则称之为超级奇数,例如 35733573 就是一个超级奇数,而 3141531415 不是。按照从小到大排序,前几名的超级奇数为 1,3,5,7,9,11,13,15,17,⋯1,3,5,7,9,11,13,15,17,⋯ 给定一个超级…...

速盾:cdn业务优化
CDN(Content Delivery Network)是一种基于互联网的分布式网络架构,旨在提供更快速、可靠的内容传输服务。它通过将内容分发至多个节点,使用户可以从离他们更近的节点获取内容,从而提高访问速度和用户体验。 然而&…...

重生奇迹mu的地图名
地图之一:勇者大陆 勇者大陆地处奇迹大陆中央。终年阴雨连绵,气候潮湿闷热。植物由充满黑暗阴森气氛的草地所构成。这里的NPC数量是所有地图中最多的。因为地步交通要冲,所以也是玩家聚集最多的地方。 这里是剑士、魔法师、魔剑士和圣导师初…...

【CSS】缩写属性gap
在CSS Grid Layout(网格布局)和Flexbox(弹性盒布局)中,gap 是一个缩写属性,用于同时设置行间隙(gutter)和列间隙(在Flexbox中通常称为“交叉轴间隙”)的大小。…...

Perl 语言开发(八):子程序和模块
目录 1. 引言 2. 子程序的基本概念与用法 2.1 子程序的定义和调用 2.2 传递参数 2.3 返回值 2.4 上下文和返回值 3. 模块的基本概念与用法 3.1 模块的定义 3.2 使用模块 3.3 导出符号 3.4 模块的文件结构和命名 4. 实际应用中的子程序与模块 4.1 子程序参数验证与…...

自注意力机制和多头注意力机制区别
Ref:小白看得懂的 Transformer (图解) Ref:一文彻底搞懂 Transformer(图解手撕) 多头注意力机制(Multi-Head Attention)和自注意力机制(Self-Attention)是现代深度学习模型&#x…...

数据结构第14节 加权图
加权图是在图论中一种更为复杂的图结构,它扩展了无向图和有向图的概念,通过给图中的边附加一个数值来表示边的某种属性,如成本、距离、容量或相似度等。这个数值被称为边的“权重”。 定义 加权图可以被形式化地定义为一个三元组 ( G (V, …...

128陷阱(超详细)
int x 128;int y 128;int n 127;int m 127;Integer d Integer.valueOf(x);Integer g Integer.valueOf(y);Integer z Integer.valueOf(n);Integer v Integer.valueOf(m);System.out.println(d g);System.out.println(z v); 思考一下他的结果是什么? 为什么…...

STM32自己从零开始实操08:STM32主控原理图
由于老师使用的各引脚分门别类的单片机原理图我没有找到,我使用是引脚按顺序摆放的,不方便一个模块一个模块截图展示,所以这部分使用老师的原理图。 一、电源 1.1电源的介绍 1.1.1数字电源和地(VDD和VSS) 数字电源…...

Ubuntu20.04配置TurtleBot3 Waffle Pi远程控制
这里写目录标题 0. 机器人配置1. Ubuntu20.04配置TurtleBot3 Waffle Pi远程控制1.1 TurtleBot3 Waffle Pi端配置1.2 PC端配置1.2.1 安装turtlebot3的环境配置1.2.2 创建项目并安装Turtlebot31.2.3 配置环境变量 1.3 PC端与TurtleBot3进行通信1.3.1 PC端与机器人端互PING和SSH连…...

SaaS产品和独立部署型产品有什么区别,该怎么选择?
随着云计算和软件服务的多样化,产品形式主要划分SaaS型(开通即用)和独立部署(完整交付)两种模式,那么SaaS产品和独立部署产品有哪些区别,我们在选择产品的时候应该如何去抉择?本文我…...

【Linux】压缩命令——gzip,bzip2,xz
1.压缩文件的用途与技术 你是否有过文件太大,导致无法以正常的E-mail方式发送?又或学校、厂商要求使用CD或DVD来做数据归档之用,但是你的单一文件却都比这些传统的一次性存储媒介还要大,那怎么分成多块来刻录?还有&am…...

【Java13】包
“包”这个机制,类似于分组。主要作用是区分不同组内的同名类。例如,高三三班有一个“王五”,高二八班也有一个“王五”。高三三班和高三八班就是两个不同的包。 Java中的包(package)机制主要提供了类的多层命名空间&…...

从零到一:Python自动化测试的详细指南!
引言: Python是一种功能强大且易于学习和使用的编程语言,它非常适合用于自动化测试。本文将从零开始,通过详细的步骤和规范,介绍如何在Python中实施高质量的自动化测试。我们将探讨测试策略的制定、测试框架的选择、测试用例的编…...

iOS中多个tableView 嵌套滚动特性探索
嵌套滚动的机制 目前的结构是这样的,整个页面是一个大的tableView, Cell 是整个页面的大小,cell 中嵌套了一个tableView 通过测试我们发现滚动的时候,系统的机制是这样的, 我们滑动内部小的tableView, 开始滑动的时候,…...