新闻详情

新闻详情

首页 / 资讯中心 / 详情

python-day06-如何处理异常?

发布时间:2026/10/2 9:29:20来源:尧图网络
python-day06-如何处理异常?
目录一、异常1.1.认识异常1.2.异常的分类1.3.捕获异常单个except块1.4.捕捉异常多个except代码块1.5.try-except嵌套1.6.使用finally代码释放资源二、自定义异常2.1.自定义异常新建异常类2.2.raise抛出异常一、异常1.1.认识异常程序在运行中总会发生一下意想不到的错误信息。为增强程序的健壮性我们也需要考虑异常处理方面的内容。例如在读取文件时需要考虑除法中分母不能为0、文件不存在、文件格式不正确等异常情况。例如i input(请输入数字) n 8888 result n / int(i) print(result) print(f{n}除以{i}等于{result})1.2.异常的分类在python中异常类的命名主要后缀都有如Exception、Error和warning也有少数几个没有采用这几个后缀命令。包括StopIteration、StopAsyncIteration、SystemExit、KeyboardInterrupt 和 GeneratorExit。特殊异常为什么不带 Error/Exception 后缀触发场景StopIteration它是“流程控制”信号而非“错误”。它告诉 for 循环“迭代器里没东西了该结束了。”当你用 next() 取完迭代器的最后一个元素时抛出。KeyboardInterrupt它是“用户交互”信号而非代码错误。代表用户主动中断。你在命令行按下 Ctrl C时抛出。SystemExit它是“退出”信号由 sys.exit()触发。目的是让解释器安全关闭。调用 sys.exit() 时抛出。GeneratorExit它是“垃圾回收”信号。当生成器对象被销毁时触发用于通知生成器执行清理工作。生成器被垃圾回收时抛出。1.3.捕获异常单个except块异常捕获是通过try-except语句实现的基本的try-except语句的语法如下。在 try 代码块中包含可能引发异常的语句。如果没有发生异常则跳过 except 代码块继续执行如果发生了异常则程序立即跳转到对应的 except 代码块执行这就是异常捕获。try:可能会引发异常的语句except [指定异常类型1] [as e]处理异常注意as e其中的e是异常对象是一个变量try-except语句的执行流程如下。注意1except 后边跟异常类型异常类型可进行指定如果不进行指定表示可以捕捉所有异常。注意2如果不指定具体的异常数据类型则except语句可以捕获在try中发生的所有异常。如果指定具体的异常类型则except语句只能捕获在try中发生的指定类型的异常。在Python中推荐在except语句中指定具体的异常类型。例如不加as e的情况下i input(请输入数字) n 8888 try: result n / int(i) print(f{n}除以{i}等于{result}) except ZeroDivisionError: print(除法运算中分母不能为0)从运行的结果可以看出在输入数字0后异常发生跳到except代码块执行。例如加as e的情况下i input(请输入数字) n 8888 try: result n / int(i) print(f{n}除以{i}等于{result}) except ZeroDivisionError as e: print(f除法运算中分母不能为0,异常的的具体信息为{e})对比就可以看出except ZeroDivisionError as e,其中e代表的就是异常抛出的具体值。1.4.捕捉异常多个except代码块语法:try:可能会引发异常的语句except 异常类型1处理异常except 异常类型2处理异常.....except:处理异常多条语句可能会引发多种不同的异常对每一种异常都会采用不同的处理方式。针对这种情况我们就可以在try后边跟多个except代码块语法如下i input(请输入数字) n 8888 try: result n / int(i) print(f{n}除以{i}等于{result}) except ZeroDivisionError as e: print(f除法运算中分母不能为0,异常的的具体信息为{e}) except ValueError as e: print(f输入的是无效数字异常{e}) except: print(抛出异常)1.5.try-except嵌套try-except还可以嵌套其实它的用法完全可以类比if elif 来进行理解也是可以多层的嵌套。例如 input(请输入数字) n 8888 try: i2 int(i) try: result n / int(i) print(f{n}除以{i}等于{result}) except ZeroDivisionError as e: print(f除法运算中分母不能为0,异常的的具体信息为{e}) except ValueError as e: print(f输入的是无效数字,不能将输入字符串正常转为数字发生异常{e}) except: print(抛出异常)1.6.使用finally代码释放资源有时在try-except语句中会占用一些资源例如打开的文件、网络连接、打开的数据库及数据结果集等都会占用计算机资源需要程序员释放这些资源。为了确保这些资源能够被释放可以使用finally代码块。在try-except语句后面还可以跟一个finally代码块语法如下注意无论是try代码块正常结束还是except代码异常结束都会执行finally代码块。i input(请输入数字) n 8888 try: i2 int(i) try: result n / int(i) print(f{n}除以{i}等于{result}) except ZeroDivisionError as e: print(f除法运算中分母不能为0,异常的的具体信息为{e}) except ValueError as e: print(f输入的是无效数字,不能将输入字符串正常转为数字发生异常{e}) except: print(抛出异常) finally: # 资源释放相关代码 print(无论如何我都执行)二、自定义异常很多情况下很多公司为了提高代码的可重用性自己编写了一些Python类库其中自已编写了一些异常类。实现自定义异常类需要继承Exception类或其子类。之前我们遇到的ZeroDivisionError和ValueError异常都属于Exception的子类。2.1.自定义异常新建异常类例如# 自定义类(继承Exception)命名为zidingyiExcption class zidingyiExcption(Exception): def __int__(self,message): super().__init__(message)2.2.raise抛出异常# 自定义类(继承Exception)命名为zidingyiExcption class zidingyiExcption(Exception): def __int__(self,message): super().__init__(message) i input(请输入数字) n 8888 try: i2 int(i) try: result n / int(i) print(f{n}除以{i}等于{result}) except ZeroDivisionError as e: print(f除法运算中分母不能为0,异常的的具体信息为{e}) except ValueError as e: # print(f输入的是无效数字,不能将输入字符串正常转为数字发生异常{e}) raise zidingyiExcption(你的输入法多少有点问题) except: print(抛出异常) finally: # 资源释放相关代码 print(无论如何我都执行)#
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

论文摘要的格式和字数怎么规范 2026/10/2 13:56:30

论文摘要的格式和字数怎么规范

摘要被退回、被要求重写的情况,问题常常不在研究内容,而在字数区间与结构要素没对齐规范。本文把摘要拆成可逐项核对的判定维度,给出不同文档类型的字数参考与要素清单,并说明知学术AIPaperGPT 的免费智能大纲、免费科研元素可以怎…

阅读更多 →
生产环境vLLM 部署 DeepSeek,如何调优,看这里|TaoToken 统一 Key 接入实测 2026/10/2 13:56:29

生产环境vLLM 部署 DeepSeek,如何调优,看这里|TaoToken 统一 Key 接入实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
S7-1200通过EtherCAT转PROFINET网关控制伺服轴改造案例 2026/10/2 13:56:22

S7-1200通过EtherCAT转PROFINET网关控制伺服轴改造案例

这段时间刚干完一个改造项目,现场情况是这样的:客户手里有一条现成的EtherCAT伺服轴产线,电机、驱动器、机械结构都是完好的,但上位控制系统换成了一套西门子S7-1200 PLC,要求PLC直接接管这台EtherCAT伺服,…

阅读更多 →
WLA³:面向语义、动力学与运动学的世界潜动作建模 2026/10/2 13:56:15

WLA³:面向语义、动力学与运动学的世界潜动作建模

26年9月来自京东集团研究院的论文“WLA: WORLD LATENT ACTION MODELING FOR SEMANTICS, DYNAMICS, AND KINEMATICS”。 这篇论文 WLA 的核心价值,是将异构数据中的“状态变化”转化为统一监督,同时用于视觉语言理解、动力学建模和机器人控制。它提供有价…

阅读更多 →
国庆长假,骗子不“休假“:信贷黑产在假期为什么更活跃 2026/10/2 13:56:15

国庆长假,骗子不“休假“:信贷黑产在假期为什么更活跃

做了十几来年反欺诈,我发现一件事特别反常识——越是大家放假、消费、放松警惕的时候,黑灰产的"产能"越不打烊。国内国庆加上海外各自的节日季,信贷欺诈到底会不会更猛?我把一线看到的和几个市场的公开数据摆出来&#…

阅读更多 →
Marvell88Q5152交换机开发(8)-项目案例工程使用 2026/10/2 13:56:14

Marvell88Q5152交换机开发(8)-项目案例工程使用

本章节使用实际的案例介绍一下项目工程要指明使用。 需求说明 1.port1,port2设置1000baseT1,port3-port5设置100baseT1,port7配置sgmii,port8配置xfi,port9配置sgmii。 2.port1和port2设置vlan2 3.port1配置020000000001,port2配置020000000002 4.port1,port2关闭端…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉