详解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中使用插入排序算法的简单分析与代码示例
May 04 Python
用TensorFlow实现戴明回归算法的示例
May 02 Python
python3实现基于用户的协同过滤
May 31 Python
pandas 按照特定顺序输出的实现代码
Jul 10 Python
用Python实现筛选文件脚本的方法
Oct 27 Python
Python rstrip()方法实例详解
Nov 11 Python
利用Python产生加密表和解密表的实现方法
Oct 15 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
Mar 03 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
May 25 Python
python语言的优势是什么
Jun 17 Python
Django model重写save方法及update踩坑详解
Jul 27 Python
PYTHON InceptionV3模型的复现详解
May 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
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
2012/09/19 PHP
解析php中call_user_func_array的作用
2013/06/07 PHP
PHP结合Vue实现滚动底部加载效果
2017/12/17 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
THINKPHP5分页数据对象处理过程解析
2020/10/28 PHP
jQuery fadeTo方法调整图片的透明度使用介绍
2013/05/06 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
2013/08/14 Javascript
获取鼠标在div中的相对位置的实现代码
2013/12/30 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
js实现做通讯录的索引滑动显示效果和滑动显示锚点效果
2017/02/18 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
2018/12/14 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
JavaScript 空间坐标的使用
2020/08/19 Javascript
微信小程序实现单个或多个倒计时功能
2020/11/01 Javascript
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python中__call__内置函数用法实例
2015/06/04 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
Pytorch 实现权重初始化
2019/12/31 Python
tensorflow 获取checkpoint中的变量列表实例
2020/02/11 Python
Python socket处理client连接过程解析
2020/03/18 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
python实现代码审查自动回复消息
2021/02/01 Python
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
红旗团支部事迹材料
2014/01/27 职场文书
移风易俗倡议书
2014/04/15 职场文书
反腐倡廉警示教育活动总结
2014/05/05 职场文书
2016银行求职自荐信
2016/01/28 职场文书
MySQL 重命名表的操作方法及注意事项
2021/05/21 MySQL
MySQL创建管理KEY分区
2022/04/13 MySQL