详解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字典基本操作实例分析
Jul 11 Python
浅谈Python的Django框架中的缓存控制
Jul 24 Python
Python基于pygame实现的font游戏字体(附源码)
Nov 11 Python
python中子类调用父类函数的方法示例
Aug 18 Python
Django admin美化插件suit使用示例
Dec 12 Python
django 环境变量配置过程详解
Aug 06 Python
Python阶乘求和的代码详解
Feb 14 Python
5行Python代码实现图像分割的步骤详解
May 25 Python
Python是什么 Python的用处
May 26 Python
python链表类中获取元素实例方法
Feb 23 Python
如何将numpy二维数组中的np.nan值替换为指定的值
May 14 Python
 Python 中 logging 模块使用详情
Mar 03 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文件系统处理方法小结
2016/05/23 PHP
DHTML Slide Show script图片轮换
2008/03/03 Javascript
js prototype截取字符串函数
2010/04/01 Javascript
javascript字符串拼接的效率问题
2010/12/25 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
2013/06/08 Javascript
jQuery之按钮组件的深入解析
2013/06/19 Javascript
jQuery读取和设定KindEditor值的方法
2013/11/22 Javascript
ClearTimeout消除闪动实例代码
2016/02/29 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
详解vue项目构建与实战
2017/06/27 Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
2017/09/15 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
初学Python实用技巧两则
2014/08/29 Python
Python版微信红包分配算法
2015/05/04 Python
python利用正则表达式提取字符串
2016/12/08 Python
Python单例模式实例详解
2017/03/01 Python
python爬虫获取新浪新闻教学
2018/12/23 Python
python实现桌面气泡提示功能
2019/07/29 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
Python中url标签使用知识点总结
2020/01/16 Python
详解Flask前后端分离项目案例
2020/07/24 Python
新西兰购物网站:TheMarket NZ
2020/09/19 全球购物
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
审核会计岗位职责
2013/11/08 职场文书
人力资源专业推荐信
2013/11/29 职场文书
广告宣传策划方案
2014/05/21 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
2015小学教师德育工作总结
2015/05/12 职场文书
居安思危观后感
2015/06/11 职场文书
springboot拦截器无法注入redisTemplate的解决方法
2021/06/27 Java/Android
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技