详解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 相关文章推荐
利用QT写一个极简单的图形化Python闹钟程序
Apr 07 Python
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
Python编程生成随机用户名及密码的方法示例
May 05 Python
Python装饰器用法实例总结
Feb 07 Python
python监控键盘输入实例代码
Feb 09 Python
TensorFlow搭建神经网络最佳实践
Mar 09 Python
python微信公众号开发简单流程
Mar 23 Python
Python 元类实例解析
Apr 04 Python
对python3 一组数值的归一化处理方法详解
Jul 11 Python
Python拆分大型CSV文件代码实例
Oct 07 Python
win10从零安装配置pytorch全过程图文详解
May 08 Python
Python OpenCV实现传统图片格式与base64转换
Jun 13 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录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
彪哥1.1(智能表格)提供下载
2006/09/07 Javascript
return false;和e.preventDefault();的区别
2010/07/11 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
Jquery表单验证失败后不提交的解决方法
2016/10/18 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
Angular HMR(热模块替换)功能实现方法
2018/04/04 Javascript
JS数组求和的常用方法实例小结
2019/01/07 Javascript
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
使用Python中的greenlet包实现并发编程的入门教程
2015/04/16 Python
pygame加载中文名mp3文件出现error
2017/03/31 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
Python爬虫教程知识点总结
2020/10/19 Python
英国高街电视:High Street TV
2018/05/22 全球购物
高中生学习总结的自我评价范文
2013/10/13 职场文书
家长写给孩子的评语
2014/04/18 职场文书
中秋晚会策划方案
2014/06/12 职场文书
法制教育演讲稿
2014/09/10 职场文书
行政经理岗位职责
2015/04/15 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
深入理解Vue的数据响应式
2021/05/15 Vue.js
Python打包exe时各种异常处理方案总结
2021/05/18 Python
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis
pandas中对文本类型数据的处理小结
2021/11/01 Python
PostgreSQL自动更新时间戳实例代码
2021/11/27 PostgreSQL
Win11安全功能升级:内置防网络钓鱼功能
2022/04/08 数码科技
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python