详解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 相关文章推荐
KMP算法精解及其Python版的代码示例
Jun 01 Python
python读取文本中数据并转化为DataFrame的实例
Apr 10 Python
详解python分布式进程
Oct 08 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
May 15 Python
python中hasattr()、getattr()、setattr()函数的使用
Aug 16 Python
python使用 request 发送表单数据操作示例
Sep 25 Python
python 单线程和异步协程工作方式解析
Sep 28 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
Mar 09 Python
pyecharts调整图例与各板块的位置间距实例
May 16 Python
pandas dataframe 中的explode函数用法详解
May 18 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
Jun 22 Python
python用700行代码实现http客户端
Jan 14 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
PHP5 安装方法
2007/01/15 PHP
利用谷歌 Translate API制作自己的翻译脚本
2014/06/04 PHP
php 二维数组时间排序实现代码
2016/11/19 PHP
JS解密入门 最终变量劫持
2008/06/25 Javascript
用JavaScript实现UrlEncode和UrlDecode的脚本代码
2008/07/23 Javascript
JQuery 弹出框定位实现方法
2010/12/02 Javascript
JavaScript事件委托实例分析
2015/05/26 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
微信小程序中多个页面传参通信的学习与实践
2017/05/05 Javascript
angular过滤器实现排序功能
2017/06/27 Javascript
vue利用axios来完成数据的交互
2018/03/23 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
jquery添加div实现消息聊天框
2020/02/08 jQuery
深入解析Python编程中JSON模块的使用
2015/10/15 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
2017/05/03 Python
Python编程二分法实现冒泡算法+快速排序代码示例
2018/01/15 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
Flask核心机制之上下文源码剖析
2018/12/25 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
django中related_name的用法说明
2020/05/20 Python
python中四舍五入的正确打开方式
2021/01/18 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
美国林业供应商:Forestry Suppliers
2019/05/01 全球购物
JavaScript实现前端网页版倒计时
2021/03/24 Javascript
八一建军节活动方案
2014/02/10 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
公司司机岗位职责范本
2014/03/03 职场文书
就业意向书范文
2014/04/01 职场文书
见义勇为事迹材料
2014/12/24 职场文书
大连导游词
2015/02/12 职场文书
个人年终总结结尾
2015/03/06 职场文书
运动会闭幕式致辞
2015/07/29 职场文书
Django 如何实现文件上传下载
2021/04/08 Python