详解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 相关文章推荐
在Python下使用Txt2Html实现网页过滤代理的教程
Apr 11 Python
python利用不到一百行代码实现一个小siri
Mar 02 Python
Python使用numpy实现BP神经网络
Mar 10 Python
Python+threading模块对单个接口进行并发测试
Jun 25 Python
使用django的ORM框架按月统计近一年内的数据方法
Jul 18 Python
如何使用Flask-Migrate拓展数据库表结构
Jul 24 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
使用Django实现把两个模型类的数据聚合在一起
Mar 28 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
Apr 19 Python
python实现简易版学生成绩管理系统
Jun 22 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
Jun 28 Python
Python之字典对象的几种创建方法
Sep 30 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
在PWS上安装PHP4.0正式版
2006/10/09 PHP
PHP实现邮件群发的源码
2013/06/18 PHP
php去除数组中重复数据
2014/11/18 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
关于js原型的面试题讲解
2016/09/25 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
详解AngularJS之$window窗口对象
2018/01/17 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
mpvue项目中使用第三方UI组件库的方法
2018/09/30 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
JavaScrip如果基于url实现图片下载
2020/07/03 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
基于elementUI竖向表格、和并列的案例
2020/10/26 Javascript
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
初学python数组的处理代码
2011/01/04 Python
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
python中enumerate函数用法实例分析
2015/05/20 Python
Python单例模式的两种实现方法
2017/08/14 Python
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
python验证码识别实例代码
2018/02/03 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
Python3中的bytes和str类型详解
2019/05/02 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
python selenium xpath定位操作
2020/09/01 Python
如何用Python 加密文件
2020/09/10 Python
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
澳大利亚购买太阳镜和眼镜网站:Glamoureyes
2020/09/22 全球购物
中西医结合临床医学专业大学生自荐信
2013/09/28 职场文书
实习生的自我评价
2014/01/08 职场文书
业务员薪酬管理制度
2014/01/15 职场文书
公司投资建议书
2014/05/16 职场文书
节约粮食标语
2014/06/18 职场文书
房屋买卖协议样本
2014/11/16 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
分布式架构Redis中有哪些数据结构及底层实现原理
2022/03/13 Redis
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技