新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

相关资讯

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

较早相关资讯

最新相关资讯

桥梁缺陷检测数据集构建:从标注规范到YOLO训练参数调优实战 2026/10/2 17:56:36

桥梁缺陷检测数据集构建:从标注规范到YOLO训练参数调优实战

简介:这是一份面向桥梁缺陷检测任务的YOLO格式目标检测数据集,适合计算机视觉方向的初学者、算法工程师以及桥梁健康监测项目相关开发者使用。数据集中标注了腐蚀、裂纹、白石灰、泄漏、剥落五类典型桥梁缺陷,并已按YOLO标准格式划分出训练集…

阅读更多 →
基于X-AnyLabeling、Grounded-SAM与autodistill的自动标注流水线全解析 2026/10/2 17:56:29

基于X-AnyLabeling、Grounded-SAM与autodistill的自动标注流水线全解析

做目标检测和实例分割项目的人,十有八九都经历过标注噩梦。我前年接手一个细分场景的实例分割任务,训练集需要6000张图,每张平均4到5个目标,用多边形逐点抠掩码,熟练标注员一天最多完成80张。算下来纯手工标注要耗掉两…

阅读更多 →
16GB显卡跑27B三进制模型:PTQ1_0与PQ2_0部署实测 2026/10/2 17:56:23

16GB显卡跑27B三进制模型:PTQ1_0与PQ2_0部署实测

先交代一下背景:我手头这台机器用的是一张 16GB 显存的中高端显卡,之前一直跑 7B、14B 的量化模型,偶尔想碰 27B 都得靠 CPU offload 硬撑,生成速度慢到让人怀疑人生。直到三进制模型 Bonsai 2 27B 出来,社区里一堆人喊…

阅读更多 →
Pixelle-Video:输入一个主题,3 分钟产出 AI 短视频 2026/10/2 17:56:16

Pixelle-Video:输入一个主题,3 分钟产出 AI 短视频

Pixelle-Video:输入一个主题,3 分钟产出 AI 短视频 【免费下载链接】Pixelle-Video 🚀 AI 全自动短视频引擎 | AI Fully Automated Short Video Engine 项目地址: https://gitcode.com/GitHub_Trending/pi/Pixelle-Video Pixelle-Vide…

阅读更多 →
图吧工具箱解压即用指南:硬件检测与验机全攻略 2026/10/2 17:56:15

图吧工具箱解压即用指南:硬件检测与验机全攻略

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

阅读更多 →
semgrep 的 OCaml 化之路:osemgrep 迁移笔记中的架构决策、进度清单与测试策略 2026/10/2 17:56:07

semgrep 的 OCaml 化之路:osemgrep 迁移笔记中的架构决策、进度清单与测试策略

SAST应用安全静态分析开发工具代码质量 【免费下载链接】semgrep Lightweight static analysis for many languages. Find bug variants with patterns that look like source code. 项目地址: https://gitcode.com/GitHub_Trending/se/semgrep 点击查看 免费下载 …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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