详解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生成器的使用方法
Nov 21 Python
python中类的一些方法分析
Sep 25 Python
python编写朴素贝叶斯用于文本分类
Dec 21 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
Dec 21 Python
详解用Python实现自动化监控远程服务器
May 18 Python
如何通过Python实现标签云算法
Jul 02 Python
Django rstful登陆认证并检查session是否过期代码实例
Aug 13 Python
Python实现自定义读写分离代码实例
Nov 16 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
Python requests.post方法中data与json参数区别详解
Apr 30 Python
Python爬虫之App爬虫视频下载的实现
Dec 08 Python
Python自动化爬取天眼查数据的实现
Jun 15 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数据结构与算法(PHP描述) 快速排序 quick sort
2012/06/21 PHP
php上传文件,创建递归目录的实例代码
2013/10/18 PHP
php mail to 配置详解
2014/01/16 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
Jquery插件 easyUI属性汇总
2011/01/19 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
JavaScript中的acos()方法使用详解
2015/06/14 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
jQuery插件开发汇总
2016/05/15 Javascript
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
2017/11/02 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
vue实现自定义多选按钮
2020/07/16 Javascript
基于vue实现简易打地鼠游戏
2020/08/21 Javascript
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
python中模块的__all__属性详解
2017/10/26 Python
Python查找第n个子串的技巧分享
2018/06/27 Python
CentOS 7下安装Python3.6 及遇到的问题小结
2018/11/08 Python
python cumsum函数的具体使用
2019/07/29 Python
python将时分秒转换成秒的实例
2019/12/07 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
香港演唱会订票网站:StubHub香港
2019/10/10 全球购物
解释一下钝化(Swap out)
2016/12/26 面试题
幼儿园三八妇女节活动方案
2014/03/11 职场文书
科技之星事迹材料
2014/06/02 职场文书
小学红领巾广播稿(3篇)
2014/09/13 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
Python Matplotlib绘制条形图的全过程
2021/10/24 Python
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript