详解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实现在pickling的时候压缩的方法
Sep 25 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
Jun 30 Python
使用Python操作excel文件的实例代码
Oct 15 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
Python设计模式之组合模式原理与用法实例分析
Jan 11 Python
python 定时任务去检测服务器端口是否通的实例
Jan 26 Python
python浪漫表白源码
Apr 05 Python
python django下载大的csv文件实现方法分析
Jul 19 Python
python3.6中@property装饰器的使用方法示例
Aug 17 Python
Python 迭代,for...in遍历,迭代原理与应用示例
Oct 12 Python
基于pytorch中的Sequential用法说明
Jun 24 Python
python实现socket简单通信的示例代码
Apr 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优于Node.js的五大理由分享
2012/09/15 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
php引用传值实例详解学习
2013/11/06 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
jQuery toggle()设置CSS样式
2009/11/05 Javascript
jquery ajax提交表单数据的两种方式
2009/11/24 Javascript
XENON基于JSON变种
2010/07/27 Javascript
在次封装easyui-Dialog插件实现代码
2010/11/14 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
纯JS代码实现一键分享功能
2016/04/20 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
2016/07/11 Javascript
AngularJS 单元测试(一)详解
2016/09/21 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
js逆向解密之网络爬虫
2019/05/30 Javascript
js实现打字小游戏
2019/12/17 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
2020/11/02 Javascript
python根据日期返回星期几的方法
2015/07/06 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
Flask之flask-script模块使用
2018/07/26 Python
python hbase读取数据发送kafka的方法
2018/12/27 Python
python 输出所有大小写字母的方法
2019/01/02 Python
python3.7 的新特性详解
2019/07/25 Python
python实现手势识别的示例(入门)
2020/04/15 Python
汽车驾驶求职信
2013/10/25 职场文书
质检部岗位职责
2013/11/11 职场文书
十佳大学生事迹材料
2014/01/29 职场文书
文艺晚会主持词
2014/03/24 职场文书
学校校庆演讲稿
2014/05/22 职场文书
2014业务员年终工作总结
2014/12/09 职场文书
运动员代表致辞
2015/07/29 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python