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

掌握【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的异常处理机制通过使用tryexcept等关键字,使得错误处理更加直观和简洁。

示例

 

# 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中,异常处理使用tryexceptelsefinally关键字。通过这些关键字,可以捕捉并处理异常,使程序能够在出现错误时继续运行。

  • 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中的异常处理机制,可以确保程序的健壮性和可维护性。使用tryexceptelsefinally块,可以编写出清晰且可维护的代码,有效管理错误。

相关文章:

掌握【Python异常处理】:打造健壮代码的现代编程指南

目录 ​编辑 1. 什么是异常&#xff1f; 知识点 示例 小李的理解 2. 常见的内置异常类型 知识点 示例 小李的理解 3. 异常机制的意义 知识点 示例 小李的理解 4. 如何处理异常 知识点 示例 小李的理解 5. 抛出异常 知识点 示例 小李的理解 6. Python内置…...

STM32点灯闪烁

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

Java-01-源码篇-04集合-05-SortedMap NavigableMap TreeMap

目录 一&#xff0c;SortedMap 二&#xff0c;NavigableMap 三&#xff0c;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年后&#xff0c;人工智能技术进入了一个更为成熟和广泛应用的阶段&#xff0c;人工通用智能&#xff08;AGI&#xff09;这一概念也成为了科技界和产业界热议的焦点。本文将结合 AGI 时代背景&#xff0c;从架构设计到落地实践&#xff0c;详细介绍拓数派云原生数据计算…...

开放式耳机哪个品牌好?开放式耳机推荐

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

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//表的编码集&#xff0c;校验集如果不指定&#xff…...

十一、作业

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控件库&#xff0c;关于如何引用&#xff0c;请参照文章——关于C#如何引用MaterialDesign控件库 2.XAML代码 <Window x:Class"MaterialDesign_…...

运维Tips | Ubuntu 24.04 安装配置 xrdp 远程桌面服务

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

ExcelVBA运用Excel的【条件格式】(二)

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

肠道和大脑中犬尿氨酸代谢途径的紊乱

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

vue通过后台返回的数字显示不同的文字内容,多个内容用、隔开

后台返回的数据 显示效果&#xff1a; html&#xff1a; <el-table-columnalign"center"label"使用过的小程序"width"124"v-if"activeTab 0"><template #default"scope"><divv-for"(item, index) in s…...

Flume工具详解

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

vulhub-activemq(CVE-2016-3088)

在 Apache ActiveMQ 5.12.x~5.13.x 版本中&#xff0c;默认关闭了 fileserver 这个应用&#xff08;不过&#xff0c;可以在conf/jetty.xml 中开启&#xff09;&#xff1b;在 5.14.0 版本后&#xff0c;彻底删除了 fileserver 应用。【所以在渗透测试过程中要确定好 ActiveMQ …...

上海市计算机学会竞赛平台2024年6月月赛丙组超级奇数

题目描述 如果一个十进制数的所有数字都是奇数&#xff0c;则称之为超级奇数&#xff0c;例如 35733573 就是一个超级奇数&#xff0c;而 3141531415 不是。按照从小到大排序&#xff0c;前几名的超级奇数为 1,3,5,7,9,11,13,15,17,⋯1,3,5,7,9,11,13,15,17,⋯ 给定一个超级…...

速盾:cdn业务优化

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

重生奇迹mu的地图名

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

【CSS】缩写属性gap

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

Perl 语言开发(八):子程序和模块

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

自注意力机制和多头注意力机制区别

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

数据结构第14节 加权图

加权图是在图论中一种更为复杂的图结构&#xff0c;它扩展了无向图和有向图的概念&#xff0c;通过给图中的边附加一个数值来表示边的某种属性&#xff0c;如成本、距离、容量或相似度等。这个数值被称为边的“权重”。 定义 加权图可以被形式化地定义为一个三元组 ( 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); 思考一下他的结果是什么&#xff1f; 为什么…...

STM32自己从零开始实操08:STM32主控原理图

由于老师使用的各引脚分门别类的单片机原理图我没有找到&#xff0c;我使用是引脚按顺序摆放的&#xff0c;不方便一个模块一个模块截图展示&#xff0c;所以这部分使用老师的原理图。 一、电源 1.1电源的介绍 1.1.1数字电源和地&#xff08;VDD和VSS&#xff09; 数字电源…...

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产品和独立部署型产品有什么区别,该怎么选择?

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

【Linux】压缩命令——gzip,bzip2,xz

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

【Java13】包

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

从零到一:Python自动化测试的详细指南!

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

iOS中多个tableView 嵌套滚动特性探索

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