详解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中的ctime()方法使用教程
May 22 Python
python自定义异常实例详解
Jul 11 Python
apache部署python程序出现503错误的解决方法
Jul 24 Python
利用python实现简单的邮件发送客户端示例
Dec 23 Python
Python编程argparse入门浅析
Feb 07 Python
python如何生成各种随机分布图
Aug 27 Python
Python面向对象之类和实例用法分析
Jun 08 Python
详解python播放音频的三种方法
Sep 23 Python
python-web根据元素属性进行定位的方法
Dec 13 Python
TensorFlow打印输出tensor的值
Apr 19 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
Sep 03 Python
Python中Permission denied的解决方案
Apr 02 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
解析argc argv在php中的应用
2013/06/24 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
2017/03/04 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
Jquery ThickBox插件使用心得(不建议使用)
2010/09/08 Javascript
再论Javascript下字符串连接的性能
2011/03/05 Javascript
js函数排序的实例代码
2013/07/01 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
2014/09/02 Javascript
Javascript字符串浏览器兼容问题分析
2014/12/01 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
2015/04/02 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
Javascript必知必会(四)js类型转换
2016/06/08 Javascript
jQuery 选择符详细介绍及整理
2016/12/02 Javascript
关于vue.js过渡css类名的理解(推荐)
2017/04/10 Javascript
详解VUE里子组件如何获取父组件动态变化的值
2018/12/26 Javascript
少女风vue组件库的制作全过程
2019/05/15 Javascript
javascript 使用sleep函数的常见方法详解
2020/04/26 Javascript
书单|人生苦短,你还不用python!
2017/12/29 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
2018/03/13 Python
Python函数参数操作详解
2018/08/03 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
九年级家长会邀请函
2014/01/15 职场文书
《纸船和风筝》教学反思
2014/02/15 职场文书
财务部副经理岗位职责
2014/03/14 职场文书
内勤主管岗位职责
2014/04/03 职场文书
公司董事长岗位职责
2014/06/08 职场文书
局领导领导班子四风对照检查材料
2014/09/27 职场文书
ztree+ajax实现文件树下载功能
2021/05/18 Javascript
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server