详解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进行基础的函数式编程的教程
Mar 31 Python
python获取当前日期和时间的方法
Apr 30 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
May 20 Python
Python有序字典简单实现方法示例
Sep 28 Python
使用Python进行目录的对比方法
Nov 01 Python
Python基础之条件控制操作示例【if语句】
Mar 23 Python
Django实现微信小程序的登录验证功能并维护登录态
Jul 04 Python
tesserocr与pytesseract模块的使用方法解析
Aug 30 Python
Python实现AI自动抠图实例解析
Mar 05 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
Jun 06 Python
Python logging模块handlers用法详解
Aug 14 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
Nov 05 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
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
Package.js  现代化的JavaScript项目make工具
2012/05/23 Javascript
Function.prototype.call.apply结合用法分析示例
2013/07/03 Javascript
JavaScript判断访问的来源是手机还是电脑,用的哪种浏览器
2013/12/12 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
原生JavaScript编写canvas版的连连看游戏
2016/05/29 Javascript
浅谈javascript中关于日期和时间的基础知识
2016/07/13 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
jQuery中each方法的使用详解
2018/03/18 jQuery
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
python操作MySQL数据库的方法分享
2012/05/29 Python
Python自动化部署工具Fabric的简单上手指南
2016/04/19 Python
python中使用%与.format格式化文本方法解析
2017/12/27 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
2018/06/04 Python
Python基础教程之异常详解
2019/01/10 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
Python3简单爬虫抓取网页图片代码实例
2019/08/26 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
python实现飞行棋游戏
2020/02/05 Python
Python使用eval函数执行动态标表达式过程详解
2020/10/17 Python
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
自我鉴定注意事项
2014/01/19 职场文书
乱世佳人观后感
2015/06/08 职场文书
致我们终将逝去的青春观后感
2015/06/10 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
2021/07/07 SQL Server
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers
css之clearfix的用法深入理解(必看篇)
2023/05/21 HTML / CSS