详解python的异常捕获


Posted in Python onMarch 03, 2022

①捕捉一个异常

捕捉一个异常

以用0作为除数会得到ZeroDivisionError异常为例,

print(1/0)

详解python的异常捕获

为例程序的持续执行,不因该异常而中止,

遂对该异常进行处理,使异常时输出该异常内容:

try:
    print(1/0)
except ZeroDivisionError as e:
        print(e)

详解python的异常捕获

②捕捉多个异常

捕捉指定的多个异常,以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)

详解python的异常捕获

③Exception捕捉所有异常

如果异常的种类不确定,则可以使用Exception来指代所有种类的异常。

以一个数值和一个字符串相加为例:

try:
    print(1 + 'strstrstr')
except Exception as e:
        print(e)

详解python的异常捕获

④raise主动触发异常

可以使用raise关键字来主动触发异常,并可以在括号内加入对该异常的说明。执行效果如图所示:

raise ZeroDivisionError("这是一个非常非常非常、很大很大很大的异常。。。")

详解python的异常捕获

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("请把代码拿回重写。")

详解python的异常捕获

⑤ 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)

如图,前三个异常被处理,第四个异常没有被处理,产生报错。

详解python的异常捕获

当try后边的代码没有被发现有异常时,则执行else后边的代码。

for i in range(4):
    try:
        print(i)
    except DangerousError:
        print("异常产生。")
    else:
        print("一切正常。")

详解python的异常捕获

不论异常处理结果如何,finally后边的代码一定会执行。

即使

for i in range(4):
    try:
        if i < 3:
            print(i)
        else:
            print(i)
            raise AError
    except DangerousError:
        print("异常产生。")
    else:
        print("一切正常。")
    finally:
        print("异常处理完成。")

详解python的异常捕获

当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!")

详解python的异常捕获

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注三水点靠木的更多内容!    

Python 相关文章推荐
python3简单实现微信爬虫
Apr 09 Python
matplotlib作图添加表格实例代码
Jan 23 Python
Python SMTP发送邮件遇到的一些问题及解决办法
Oct 24 Python
详解Python中的内建函数,可迭代对象,迭代器
Apr 29 Python
python 实现一个反向单位矩阵示例
Nov 29 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
Dec 04 Python
Python实现钉钉订阅消息功能
Jan 14 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
python用opencv完成图像分割并进行目标物的提取
May 25 Python
flask框架中的cookie和session使用
Jan 31 Python
Python xlwings插入Excel图片的实现方法
Feb 26 Python
如何使用Python提取Chrome浏览器保存的密码
Jun 09 Python
分享提高 Python 代码的可读性的技巧
Mar 03 #Python
使用python创建股票的时间序列可视化分析
Python Pandas读取Excel日期数据的异常处理方法
pytorch中的torch.nn.Conv2d()函数图文详解
Feb 28 #Python
python3中apply函数和lambda函数的使用详解
Feb 28 #Python
你需要掌握的20个Python常用技巧
Feb 28 #Python
python opencv将多个图放在一个窗口的实例详解
You might like
PHP新手上路(六)
2006/10/09 PHP
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
2014/08/21 PHP
详解php与ethereum客户端交互
2018/04/28 PHP
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
简单实现JS计算器功能
2016/12/21 Javascript
原生js开发的日历插件
2017/02/04 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
纯js实现画一棵树的示例
2017/09/05 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
2018/05/17 Javascript
使用vue-infinite-scroll实现无限滚动效果
2018/06/22 Javascript
vue-cli监听组件加载完成的方法
2018/09/07 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
Python多线程编程(三):threading.Thread类的重要函数和方法
2015/04/05 Python
Python的多态性实例分析
2015/07/07 Python
python下10个简单实例代码
2017/11/15 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
Python tornado队列示例-一个并发web爬虫代码分享
2018/01/09 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
Flask框架单例模式实现方法详解
2019/07/31 Python
Pytorch实现LSTM和GRU示例
2020/01/14 Python
Python面向对象编程基础实例分析
2020/01/17 Python
可自定义箭头样式的CSS3气泡提示框
2016/03/16 HTML / CSS
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
学习十八届三中全会精神实施方案
2014/02/17 职场文书
电大奖学金获奖感言
2014/08/14 职场文书
离婚案件上诉状
2015/05/23 职场文书
描述鲁迅的名言整理,一生受用
2019/08/08 职场文书
使用Pytorch实现two-head(多输出)模型的操作
2021/05/28 Python
Python装饰器详细介绍
2022/03/25 Python