详解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 26 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
May 22 Python
举例讲解Python中字典的合并值相加与异或对比
Jun 04 Python
Python模拟登陆实现代码
Jun 14 Python
Python代码实现KNN算法
Dec 20 Python
Python爬虫设置代理IP的方法(爬虫技巧)
Mar 04 Python
Python3.7实现中控考勤机自动连接
Aug 28 Python
对Python3.x版本print函数左右对齐详解
Dec 22 Python
python函数不定长参数使用方法解析
Dec 14 Python
python搜索算法原理及实例讲解
Nov 18 Python
详解python中的异常和文件读写
Jan 03 Python
Python访问Redis的详细操作
Jun 26 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
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
PHP实现Session入库/存入redis的方法
2017/05/04 PHP
php实现session共享的实例方法
2019/09/19 PHP
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
淘宝搜索框效果实现分析
2011/03/05 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
javascript窗口宽高,鼠标位置,滚动高度(详细解析)
2013/11/18 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
深入理解setTimeout函数和setInterval函数
2016/05/20 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
使用Angular material主题定义自己的组件库的配色体系
2019/09/04 Javascript
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
详解JavaScript执行模型
2020/11/16 Javascript
token 机制和实现方式
2020/12/15 Javascript
使用Python中的cookielib模拟登录网站
2015/04/09 Python
Python返回真假值(True or False)小技巧
2015/04/10 Python
Python通过poll实现异步IO的方法
2015/06/04 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
python属于跨平台语言码
2020/06/09 Python
python实现批量转换图片为黑白
2020/06/16 Python
python的pip有什么用
2020/06/17 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
丝芙兰加拿大官方网站:SEPHORA加拿大
2018/11/20 全球购物
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
EntityManager都有哪些方法
2013/11/01 面试题
竞选卫生委员演讲稿
2014/04/28 职场文书
行政求职信
2014/07/04 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
大学生创业计划书
2019/06/24 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书