Python编程中的异常处理

什么是异常? 

程序错误(errors)有时也被称为程序异常(exceptions),这是每个编程人员都会经常遇到的问题。在过去,当遇到这类情况时,程序会终止执行并显示错误信息,通常是以Traceback的形式展示详细的异常报告。然而,Python提供了一项强大的功能,允许我们捕捉这些异常并编写相应的异常处理程序。当异常被捕捉时,会执行相应的异常处理程序,从而使程序能够继续执行,而不是立即终止。这样的机制极大地增强了程序的健壮性和容错能力。

示例:

Python提供了多种内置的异常类型

在Python中,异常是程序运行时发生的错误情况。Python提供了多种内置的异常类型,用于处理不同的错误场景。以下是一些常见的Python异常种类:

  1. AttributeError:当访问的对象属性不存在或者不支持赋值时触发。
  2. AssertionError:当assert断言条件为假时抛出。
  3. ImportError:导入模块或包时出错,通常是由于路径问题或名称错误。
  4. IndexError:当访问序列(如列表、元组或字符串)时,下标索引超出其范围。
  5. KeyError:在字典中查找一个不存在的键时触发。
  6. NameError:尝试访问一个未定义的变量时抛出。
  7. OSError:操作系统产生的异常,如文件操作错误。
  8. SyntaxError:当代码中存在语法错误时抛出。
  9. TypeError:在运算或函数调用中,使用了不兼容的类型时触发。例如,尝试将整数和字符串相加。
  10. ValueError:当函数或操作的参数具有正确的类型但不合法时引发。例如,尝试将非数字字符串转换为整数。
  11. ZeroDivisionError:进行数学运算时除数为0时触发。

当这些异常发生时,Python会中断当前的执行流程,并跳转到异常处理代码(如果有的话)。如果没有适当的异常处理代码,程序将终止并显示错误信息。通过编写tryexcept块,可以捕获这些异常并定义自定义的异常处理逻辑,从而使程序更加健壮和容错。

捕获异常try-except

基本捕获异常方法

try :
指令               #预先设想可能引发错误异常的指令
except  异常对象: 
异常处理程序        #通常是指出异常原因,方便修正

实例代码:

def div(x,y):try:return x / yexcept ZeroDivisionError :print("除数不可为0")print(div(5,0))
print(div(2,2))

代码解释: 

当try块中的代码引发异常时,控制流会立即转移到与之匹配的except块。在这个例子中,except ZeroDivisionError块会捕获ZeroDivisionError异常,并执行块内的代码,即打印出“除数不可为0”。

当您调用print(div(5,0))时,由于除数为0,会引发ZeroDivisionError异常,因此会执行except块中的代码,打印出“除数不可为0”,并且函数返回None(因为没有return语句在except块中)。所以,第一个print语句的输出是“除数不可为0”,而div(5,0)的返回值是None。

当您调用print(div(2,2))时,由于除数不为0,try块中的代码可以成功执行,返回商1.0。因此,第二个print语句的输出是1.0。

如果想要消除“None”,可用return,看下面这个例子:

def div(x,y):try:return x / yexcept ZeroDivisionError :return("除数不可为0")print(div(5,0))
print(div(2,2))

输出结果:

D:\anaconda2019\python.exe D:/pyprogect/异常处理/test1.py
除数不可为0
1.0Process finished with exit code 0


捕获多种异常

示例代码:

def div(x,y):try:return x / yexcept (NameError,ZeroDivisionError) as err :return("捕获到命名异常 或者 除0异常")print(div(5,0))

输出结果:

D:\anaconda2019\python.exe D:/pyprogect/异常处理/test1.py
捕获到命名异常 或者 除0异常

捕获所有异常

try-except可以获取全部的异常 

def div(x,y):try:return x / yexcept :print("出现了某种异常。")print(div(5,0))

或者使用Exception

def div(x,y):try:return x / yexcept Exception as e :print("出现了某种异常。")print(div(5,0))

异常的else

def div(x,y):try:print(x / y)except Exception as e :print("出现了某种异常。")else:print("没有出现异常。")div(5,5)

 结果输出:

D:\anaconda2019\python.exe D:/pyprogect/异常处理/test1.py
1.0
没有出现异常。Process finished with exit code 0

异常中的Finally

finally表示的是无论是否异常都要执行的代码。

try:print(5 / 2)
except Exception as e :print("出现了某种异常。")
else:print("该程序中没有出现异常。")
finally:print("《程序结束》")

输出结果:

D:\anaconda2019\python.exe D:/pyprogect/异常处理/test1.py
2.5
该程序中没有出现异常。
《程序结束》Process finished with exit code 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/687768.shtml

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

相关文章

JAVA之Java线程核心详解

Java线程核心 1.进程和线程 进程:进程的本质是一个正在执行的程序,程序运行时系统会创建一个进程,并且给每个进程分配独立的内存地址空间保证每个进程地址不会相互干扰。同时,在 CPU 对进程做时间片的切换时,保证进程…

QT安装-多版本

下载下载器 Qt开发技巧之快速安装多版本Qt_qt安装多版本-CSDN博客 无法下载存档bug-更换镜像源 windows安装QT时出现“无法下载存档……”解决办法 - lmore - 博客园 (cnblogs.com)

微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用

🏷️个人主页:鼠鼠我捏,要死了捏的主页 🏷️系列专栏:Golang全栈-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站,通俗易懂&…

探索ES6:JavaScript的下一代标准

文章目录 探索ES6:JavaScript的下一代标准1. let 和 const2. Arrow Functions(箭头函数)3. 模板字符串4. 解构赋值5. 类和模块 探索ES6:JavaScript的下一代标准 ES6,也称为ECMAScript 2015,是JavaScript的…

穿越网络迷雾:OSI网络层的全面探索与未来展望

1. 网络层的基本概念和功能 OSI(开放式系统互连)模型的网络层位于第三层,主要负责在多个网络间转发数据包,确保数据能够从源头到达目的地。网络层的基本功能包括: 路由选择 :确定数据从源到目的地的路径。…

猫头虎博客分享:深入解析 Visual Studio Code 1.86 版本新特性

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

测试文章笔记-SQL3种优化方法

SQL语句优化: 本质:降低执行时间 **核心思路:**找到执行计划中开销较高的操作,改写SQL语句或改变表访问方式调整执行计划。 举例: 1.使用索引替代全表扫描(索引:是帮助MysQL高效获取数据的数…

【JVM】打破双亲委派机制

📝个人主页:五敷有你 🔥系列专栏:JVM ⛺️稳中求进,晒太阳 打破双亲委派机制 打破双亲委派机制三种方法 自定义类加载器 ClassLoader包含了四个核心方法 //由类加载器子类实现,获取二进制数据调用…

MySQL之json数据操作

1 MySQL之JSON数据 总所周知,mysql5.7以上提供了一种新的字段格式json,大概是mysql想把非关系型和关系型数据库一口通吃,所以推出了这种非常好用的格式,这样,我们的很多基于mongoDB的业务都可以用mysql去实现了。当然…

NumPy模块完结篇:深入探讨和高效利用【第85篇—NumPy模块】

NumPy模块完结篇:深入探讨和高效利用 NumPy是Python中用于科学计算的核心库之一,提供了高性能的多维数组对象(numpy.ndarray)以及许多用于操作这些数组的函数。在前面的几篇博客中,我们介绍了NumPy的基础知识、数组操…

19 OpenGL计算着色器

计算着色器 Compute Shaders 除了面向图形的着色操作,例如顶点着色、曲面细分、几何着色和片段着色之外,OpenGL还可以通过使用计算着色器进行通用计算。计算管线是一种执行通用着色器的单阶段机器形式。计算着色器按照第7.1节描述的方式创建&#xff0c…

go-zero读取mysql部分字段

读取部分字段,使用函数 QueryRowPartialCtx 。 假设有如下一张表: CREATE TABLE test (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, ctime DATETIME);要读取字段 ctime 值。 定义一结构体: type X struct {state int db:"…

电子商务跨境电商大数据的关键技术之—主流电商大数据采集

大数据采集是指通过各种技术手段和工具收集、获取和提取大规模数据的过程。在信息时代,各种互联网、物联网、移动设备等的普及和应用,产生了海量的数据,这些数据被称为大数据。大数据采集就是对这些数据进行收集和抓取,以获得有意…

手把手一起开发SV4E-I3C设备(二)

JEDEC DDR5 SPD Hub Devices例程 DDR5生态系统的核心是SidebandBus Protocol 参考下图,可以将SV4E-I3C的端口1声明为主服务器(模拟主机控制器),并且它可以属于SV4E-I3C上的一个总线。端口2可以作为SPD Hub DUT的Local Bus侧的从站连接。这个从站可以被…

12(S)-HETE ELISA kit--灵敏的ELISA试剂盒

灵敏的ELISA试剂盒,能够检测任何物种的培养上清液和血浆中的12(S)-HETE HETE是由脂氧合酶代谢花生四烯酸产生的副产物。12(S)-HETE是12(S)-氢过氧四烯酸(12(S)-HpETE)还原的立体特异性羟基产物,其本身是花生四烯酸的12-脂氧酶代谢…

23年秋招结束,同学们陆陆续续拿到心仪的offer!24年秋招出发!

续接上次上岸同学的分享:还在担心秋招吗?看看24届已上岸同学的经验分享! 秋招的时间过程相同,但经历却各不相同。学历、专业似乎都影响着同学们的面试经历和感受。校招的面试毫无疑问学历的加持是巨大的优势,学历好会…

精通嵌入式开发:实战与案例分析

精通嵌入式开发需要深入理解嵌入式系统的原理和技术,并通过实战和案例分析来提升实际应用能力。以下是关于精通嵌入式开发的实战与案例分析的小点论述: 1.掌握嵌入式系统原理 需要深入学习嵌入式系统的基本原理,包括处理器架构、嵌入式操作系…

Linux系统管理

任务管理 什么是任务管理 在系统运维过程中,可能需要在某人预设的时间执行特定任务 比如定时发送邮件、备份并清空日志文件等任务 任务的内容可以看作是一系列命令或者一个脚本,我们则需要在特定时间去执行它 任务管理的类型 计划执行,在特定…

票房25亿!《热辣滚烫》的创造性模仿,普通人赚钱的落地方法

最近很火的电影《热辣滚烫》包含了我们很多普通人做点小事儿,赚点小钱非常落地的方法,叫做创造性模仿。 很多人说《热辣滚烫》是翻拍的日本《百元之恋》,知道这个有什么用?就证明贾玲不是那么优秀吗?对我们普通人想赚…

全新超大屏三防加固平板为什么做到Intel core i7的高性能

在小编看来,一款加固三防平板电脑结构规划的思路:一定是要在三防规划中留意取舍的。如果是三防要求高的的商品,则需要将三防规划作为一个主线来做,其他方面环绕三防要求打开,并要有清晰的三防思路和总体思想&#xff0…