详解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获取局域网占带宽最大3个ip的方法
Jul 09 Python
Python内置函数——__import__ 的使用方法
Nov 24 Python
解决Python2.7读写文件中的中文乱码问题
Apr 12 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
python实现抖音视频批量下载
Jun 20 Python
对tf.reduce_sum tensorflow维度上的操作详解
Jul 26 Python
解决pycharm 误删掉项目文件的处理方法
Oct 22 Python
python基于opencv检测程序运行效率
Dec 28 Python
pycharm 中mark directory as exclude的用法详解
Feb 14 Python
python3 正则表达式基础廖雪峰
Mar 25 Python
Python字符串split及rsplit方法原理详解
Jun 29 Python
Pycharm 如何设置HTML文件自动补全代码或标签
May 21 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 和 XML: 使用expat函数(三)
2006/10/09 PHP
php多维数组去掉重复值示例分享
2014/03/02 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
浅谈javascript 面向对象编程
2009/10/28 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
Extjs改变树节点的勾选状态点击按钮将复选框去掉
2013/11/14 Javascript
WEB开发之注册页面验证码倒计时代码的实现
2016/12/15 Javascript
前端构建工具之gulp的语法教程
2017/06/12 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
2020/06/06 jQuery
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
Python闭包的两个注意事项(推荐)
2017/03/20 Python
python requests爬取高德地图数据的实例
2018/11/10 Python
python系列 文件操作的代码
2019/10/06 Python
多个python文件调用logging模块报错误
2020/02/12 Python
Python Django搭建网站流程图解
2020/06/13 Python
简述 Python 的类和对象
2020/08/21 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
goodhealth官方海外旗舰店:新西兰国民营养师
2017/12/15 全球购物
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
什么是抽象
2015/12/13 面试题
工商管理实习自我鉴定
2013/09/28 职场文书
护士自我鉴定
2013/10/23 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
合同和协议有什么区别?
2014/10/08 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
工会文体活动总结
2015/05/07 职场文书
刑事上诉状范文
2015/05/22 职场文书
法律讲堂观后感
2015/06/11 职场文书
初三英语教学反思
2016/02/15 职场文书
怎样做好公众演讲能力?
2019/08/28 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书