python 异常捕获详解流程
作者:侯小啾 发布时间:2022-06-12 15:31:04
1 捕捉一个异常
捕捉一个异常 以用0作为除数会得到ZeroDivisionError异常为例,
print(1/0)
为例程序的持续执行,不因该异常而中止, 遂对该异常进行处理,使异常时输出该异常内容:
try:
print(1/0)
except ZeroDivisionError as e:
print(e)
2 捕捉多个异常
捕捉指定的多个异常,以ZeroDivisionError和TypeError为例。 应用情景:
①可以用于捕捉指定的几种对我们程序需求有用的异常,产生这些异常时我们去执行相应的操作。
②指定几种不影响程序最终需求并可以忽略掉的异常。产生该异常时将其忽略,如果产生其他异常,则才是需要再进行调试处理的。
for i in range(2):
print(i)
try:
if i == 0:
print(1/0)
else:
print(1 + 'str')
except (ZeroDivisionError, TypeError) as e:
print(e)
3 Exception捕捉所有异常
如果异常的种类不确定,则可以使用Exception来指代所有种类的异常。
以一个数值和一个字符串相加为例:
try:
print(1 + 'strstrstr')
except Exception as e:
print(e)
4 raise主动触发异常
可以使用raise关键字来主动触发异常,并可以在括号内加入对该异常的说明。执行效果如图所示:
raise ZeroDivisionError("这是一个非常非常非常、很大很大很大的异常。。。")
raise可用于创建自己的异常类,用于定义新的异常。 当程序触发了某种条件(if True),则raise一个定义好的异常
如定义一个名为DangerousError的异常:
class DangerousError(Exception):
def __init__(self, msg):
self.msg = msg
def __str__(self):
return self.msg
if True:
raise DangerousError("异常警告!异常警告!异常警告!异常警告!异常警告!\n异常警告!异常警告!异常警告!异常警告!异常警告!")
else:
raise DangerousError("请把代码拿回重写。")
5 try…except…else…finally 逻辑
try后边是要处理的部分
如果try部分触发的异常的名字在except后边(或Exception),则执行Exception后边的代码;
except可以有多个,且没有数量限制,匹配的时候回从第一个开始依次往下匹配;
如果有触发异常,但该异常不被except所匹配,则还是会报错;
class DangerousError(Exception):
def __init__(self, msg):
self.msg = msg
def __str__(self):
return self.msg
AError = DangerousError("犯了DangerousErrorA错误")
BError = DangerousError("犯了DangerousErrorB错误")
CError = DangerousError("犯了DangerousErrorC错误")
Elist = [AError, BError, CError, TypeError('1233211234567')]
for i in range(4):
print(i)
try:
raise Elist[i]
except DangerousError as e:
print(e)
如图,前三个异常被处理,第四个异常没有被处理,产生报错。
当try后边的代码没有被发现有异常时,则执行else后边的代码。
for i in range(4):
try:
print(i)
except DangerousError:
print("异常产生。")
else:
print("一切正常。")
不论异常处理结果如何,finally后边的代码一定会执行。 即使
for i in range(4):
try:
if i < 3:
print(i)
else:
print(i)
raise AError
except DangerousError:
print("异常产生。")
else:
print("一切正常。")
finally:
print("异常处理完成。")
当try…except部分检测到不匹配的异常时,程序在运行finally后结束执行,报出异常:
以该例为例,第二个异常TypeError(‘1233211234567')与DangerousError不匹配。 所以循环只执行了两次,并在输出了两次"处理完成。"后程序结束。 最外层的print(“hello world!”)始终不被执行。
Elist = [AError, TypeError('1233211234567'), BError, CError]
for i in range(4):
print(i)
try:
raise Elist[i]
except DangerousError as e:
print(e)
finally:
print("处理完成。")
print("hello world!")
来源:https://blog.csdn.net/weixin_48964486/article/details/123190018


猜你喜欢
- 查看当前连接系统参数:SHOW VARIABLES LIKE '%char%'; mysql> show variab
- 本文实例讲述了Python进程,多进程,获取进程id,给子进程传递参数操作。分享给大家供大家参考,具体如下:线程与线程之间共享全局变量,进程
- 集合 (set)1、由不同的元素组成,用{ }大括号括起来,用,逗号隔开2、无序的3、集合中的元素必须是比可变类型4、集合会自动去重例如:s
- 我们经常使用傅里叶变换来计算数字信号的频谱,进而分析数字信号,离散时间傅里叶变换的公式为:可是自己动手实现一遍才是最好的学习。在数字分析里面
- 在oracle中有很多关于日期的函数,如:1、add_months()用于从一个日期值增加或减少一些月份date_value:=add_mo
- 一、什么是Golang?Golang(又称Go)是一种由谷歌公司开发的编程语言。它是一种静态类型、编译型、并发型语言,被设计用于构建高效、可
- 本文实例讲述了flask框架jinja2模板与模板继承。分享给大家供大家参考,具体如下:jinja2模板from werkzeug.cont
- 本文主要介绍了一个获取SQL Server数据字典的经典SQL语句,大家可以根据各自的实际情况对这段语句进行相应的修改。SELECT sys
- 一般来说,一个真正的、完整的站点是离不开数据库的,因为实际应用中,需要保存的数据很多,而且这些数据之间往往还有关联,利用数据库来管理这些数据
- 论文:Interactive Image Warping(1993年Andreas Gustafsson)算法思路:假设当前点为(x,y),
- 参考其他比较专业的博客系统,都在代码块上有一个复制代码的按钮。用来快速复制整个代码块的代码。于是我也想给我的博客增加一个这个功能。注:chr
- 第一种方法、浏览器设置兼容模式打开IE,点击“工具”菜单,选择“兼容性视图设置”,勾选“在兼容性视图中显示所有网站”选项即可。第二种方法、在
- 前言其实就是个小问题,但是爆出来的时候也很莫名其妙。因为之前都跑得好好的,只是换了不同的文件去跑才出的问题,关键是不同的文件要处理的内容和格
- 安装数据可视化模块matplotlib:pip install matplotlib导入matplotlib模块下的pyplot1 折线图f
- MySQL中涉及的几个字符集 character-set-server/default-character-set:服务器字符集,默认情况下
- 代码如下:import matplotlib.pyplot as pltx = [1,2,3,4,5,6,7,8]y = [5,2,4,2,
- 本文实例讲述了python模拟鼠标拖动操作的方法。分享给大家供大家参考。具体如下:pdf中的书签只有页码,准备把现有书签拖到一个目录中,然后
- 前言help(argparse)查看说明文档,“argparse - Command-line parsing libr
- 你知道(X)HTML中最多余的标签中是什么吗?在我看来就是这个<a>标签,不错,就是每个网站使用最多的超级链接标签<a&g
- 做python项目时,想安装某个依赖包的最新版本,但又不知道它的版本号具体到多少,因此需要搜索查看它的相关简介信息.原来的时候,可以直接通过