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

Python 异常处理

python 中异常捕获使用的关键字,try、except、finally。
try 里面放,可以引发异常的代码。
execpt 里面放处理异常的代码 finally 里面的代码,始终会在 try 执行之后,无论是否发送异常,都会执行。

0x01 try:...except

在 try 代码块中包含在执行过程中可能引发异常的语句,如果没有发生异常,则跳到 except 代码块执行,这就是异常捕获。异常捕获是通过try-except语句实现的,基本的try-except语句的语法如下:

try:<可能会引发异常的语句>
except[异常类型]:   #异常类型可以省略<处理异常>

image

try:while True:num1=input("请输入第一个数字:")num2=input("请输入第二个数字:")num=int(num1)/int(num2)print("{n1}÷{n2}={n3}".format(n1=num1,n2=num2,n3=num))
except Exception as e:print("异常:{}".format(e))
#输出结果为:
请输入第一个数字:0
请输入第二个数字:0
异常:division by zero

except Exception as e:表示捕获任意类型的异常。Exception 是 python 中所有内置异常的基类。

0x02 多个 except 模块

多条语句可能会引发多种不同的异常,对每一种异常都会采用不同的处理方式。针对这种情况,我们可以在一个 try 后面跟多个 except 代码块,语法如下:

try:<可能会引发异常的语句>
except 异常类型1:   #多个except代码块根据异常类型匹配到不同的except代码块<处理异常>
except 异常类型2:<处理异常>
...
except:   #省略异常类型的except代码块是默认的except代码块,它只能被放到最后,捕获上面没有匹配的异常类<处理异常>

示例代码如下:

try:while True:num1=input("请输入第一个数字:")num2=input("请输入第二个数字:")num=int(num1)/int(num2)print("{n1}÷{n2}={n3}".format(n1=num1,n2=num2,n3=num))
except ZeroDivisionError as e:print("除数不能为0异常:{}".format(e))
except ValueError as e:print("输入的数据不正确异常:{}".format(e))
except Exception as e:print("异常:{}".format(e))
#输出结果为:
请输入第一个数字:aa
请输入第二个数字:bb
输入的数据不正确异常:invalid literal for int() with base 10: 'aa'

0x03 finally

有时在 try-except 语句中会占用一些资源,例如打开的文件、网络连接、打开的数据库及数据结果集等都会占用计算机资源,需要程序员释放这些资源。为了确保这些资源能够被释放,可以使用 finally 代码块。

try:<可能会引发异常的语句>
except 异常类型1:<处理异常>
except 异常类型2:<处理异常>
...
except:<处理异常>
finally:<释放资源>

无论是 try 代码块正常结束还是 except 代码块异常结束,都会执行 finally 代码块。

i = input('请输入数字:')
n = 8888
try:result =n / int(i)print(result)print('{0}除以{1}等于{2}'.format(n,i,result))
except ZeroDivisionError as e:print("不能除以0,异常{}".format(e))
except ValueError as e:print("输入的是无效数字,异常{}".format(e))
finally:print('资源释放...')
输出结果为:
请输入数字:a
输入的是无效数字,异常invalid literal for int() with base 10: 'a'
资源释放...

0x04 自定义异常类

实现自定义异常类,需要继承 Exception 类或其他子类,之前遇到的 ZeroDivisionError 和 ValueError 异常都属于 Exception 的子类。
实现自定义异常类的示例代码如下:

class dingyiException(Exception):def __init__(self,message):   #构造方法,其中的参数message是异常描述信息super().__init__(message)   #调用父类构造方法,并把message传给父类构造方法

目前为止,我们接触到的异常都是由于解释器引发的。也可以通过 raise 语句手动引发异常。

class MyException(Exception):def __init__(self,message):super().__init__(message)
try:while True:num1=input("请输入第一个数字:")num2=input("请输入第二个数字:")num=int(num1)/int(num2)print("{n1}÷{n2}={n3}".format(n1=num1,n2=num2,n3=num))
except (ZeroDivisionError,ValueError) as e:raise MyException("异常:{}".format(e))
except Exception as e:raise MyException("报异常了,异常:{}".format(e))
#输出结果为:
请输入第一个数字:1
请输入第二个数字:0
Traceback (most recent call last):num=int(num1)/int(num2)
ZeroDivisionError: division by zeroDuring handling of the above exception, another exception occurred:Traceback (most recent call last):raise MyException("异常:{}".format(e))
__main__.MyException: 异常:division by zero
http://www.jsqmd.com/news/338918/

相关文章:

  • MTX-A 型模拟式燃油压力表(0–100 PSI)产品技术手册与实战应用指南
  • 【计算机毕业设计案例】基于ssm的四六级在线考试系统基于ssm的英语四六级学习系统(程序+文档+讲解+定制)
  • YOLO26涨点改进 | 全网独家首发,卷积创新改进篇 | TGRS 2025 | 引入FSConv频率–空间卷积模块,通过小波分解提取高频信息,突出图像中的细节与边缘,助力YOLO26有效涨点
  • AI应用架构师指南:企业AI能力评估如何与OKR体系结合
  • 基于springboot + vue球鞋购物系统(源码+数据库+文档)
  • 计算机SSM毕设实战-基于SSM实现的求职招聘系统基于ssm的就业招聘查询系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • AI应用架构师如何优化AI虚拟培训的ROI?3个商业化设计点
  • 内置打印+精准诊断:MDX-P300型电池和电气系统分析仪 4S店/新能源维保/小车队全场景实战全解
  • 【课程设计/毕业设计】基于SSM网上求职招聘系统基于ssm的就业招聘查询系统【附源码、数据库、万字文档】
  • 【题解】CF1693D Decinc Dividing
  • 健康科技的新突破点:提示工程的重要贡献方向
  • 【计算机毕业设计案例】基于ssm的Web的摄影分享平台系统基于Web的摄影分享平台(程序+文档+讲解+定制)
  • 【课程设计/毕业设计】基于ssm的英语四六级学习系统英语四六级学习考试系统【附源码、数据库、万字文档】
  • SQL Server 2019入门学习教程,从入门到精通,初识 SQL Server 2019 —— 语法知识点与使用方法详解(1)
  • 基于Django的微信订阅号AI接入系统设计与实现
  • 【毕业设计】基于ssm的就业招聘查询系统(源码+文档+远程调试,全bao定制等)
  • 基于多模态AI技术的智能图像与音乐生成系统设计与实现
  • 大数据时代必看!5种高效数据脱敏技术全解析
  • 【金融项目实战】2_接口测试 _API文档分析
  • 基于Django的超市管理系统设计与实现
  • 学习记录260203
  • 【笔记】【市场中的资金数量是如何调整的】【各个银行的功能是什么】【金融市场包括什么】【市场包括什么】
  • Precor必确GLUTEBUILDER系列精准聚焦,解锁臀部训练新维度
  • 2026年沃尔玛人权审核新规
  • ARP欺骗:ARP 协议与欺骗本质,ARP 欺骗的攻击流程是什么?
  • C++ 40年:从系统基石到AI浪潮的坚守与革新 - 指南
  • LlamaFactory的docker-compose安装 - 教程
  • 在RAG增强检索中应该用什么构建上下文?
  • 26年寒假生活指导2.3
  • CSS中的 `dvh` 与 `vh`: 深入理解视口单位