详解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 AES加密实例解析
Jan 18 Python
Python matplotlib绘图可视化知识点整理(小结)
Mar 16 Python
django manage.py扩展自定义命令方法
May 27 Python
使用Python实现从各个子文件夹中复制指定文件的方法
Oct 25 Python
Python格式化字符串f-string概览(小结)
Jun 18 Python
使用Python为中秋节绘制一块美味的月饼
Sep 11 Python
PYTHON如何读取和写入EXCEL里面的数据
Oct 28 Python
python编程进阶之类和对象用法实例分析
Feb 21 Python
Python 里最强的地图绘制神器
Mar 01 Python
一劳永逸彻底解决pip install慢的办法
May 24 Python
pytorch 实现在测试的时候启用dropout
May 27 Python
进行数据处理的6个 Python 代码块分享
Apr 06 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
Centos PHP 扩展Xchche的安装教程
2016/07/09 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
用javascript实现读取txt文档的脚本
2007/07/20 Javascript
js导出txt示例代码
2014/01/14 Javascript
脚本合并提升javascript性能示例
2014/02/24 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
2015/06/01 Javascript
详解JavaScript基于面向对象之创建对象(2)
2015/12/10 Javascript
javascript单页面手势滑屏切换原理详解
2016/03/21 Javascript
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
2016/09/01 Javascript
基于jquery日历价格、库存等设置插件
2020/07/05 jQuery
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
2018/08/17 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)
2019/11/21 Javascript
java遇到微信小程序 &quot;支付验证签名失败&quot; 问题解决
2019/12/22 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
详细讲解Python中的文件I/O操作
2015/05/24 Python
Python 查找字符在字符串中的位置实例
2018/05/02 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
深入理解Django-Signals信号量
2019/02/19 Python
Django restframework 源码分析之认证详解
2019/02/22 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
2019/04/27 Python
Python Pandas 对列/行进行选择,增加,删除操作
2020/05/17 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
css3实现3d旋转动画特效
2015/03/10 HTML / CSS
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
电影T恤、80年代T恤和80年代服装:TV Store Online
2020/01/05 全球购物
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
创先争优活动方案
2014/02/12 职场文书
人事专员职责
2014/02/22 职场文书
淘宝客服专员岗位职责
2014/04/11 职场文书
个人委托书
2014/07/31 职场文书
Pytorch 如何实现常用正则化
2021/05/27 Python