详解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版的文曲星猜数字游戏代码
Sep 02 Python
Python通过递归遍历出集合中所有元素的方法
Feb 25 Python
讲解Python中的标识运算符
May 14 Python
Python文件及目录操作实例详解
Jun 04 Python
定制FileField中的上传文件名称实例
Aug 23 Python
对python中使用requests模块参数编码的不同处理方法
May 18 Python
Python的赋值、深拷贝与浅拷贝的区别详解
Feb 12 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
Feb 20 Python
如何安装并在pycharm使用selenium的方法
Apr 30 Python
django models里数据表插入数据id自增操作
Jul 15 Python
基于python的matplotlib制作双Y轴图
Apr 20 Python
聊聊基于pytorch实现Resnet对本地数据集的训练问题
Mar 25 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 获取可变函数参数的函数
2009/08/26 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
PHP如何将log信息写入服务器中的log文件
2015/07/29 PHP
培养自己的php编码规范
2015/09/28 PHP
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
jQueryMobile之Helloworld与页面切换的方法
2015/02/04 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
基于rem的移动端响应式适配方案(详解)
2017/07/07 Javascript
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
Angular6中使用Swiper的方法示例
2018/07/09 Javascript
详解jQuery设置内容和属性
2019/04/11 jQuery
新手如何快速理解js异步编程
2019/06/24 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
JavaScript文档加载模式以及元素获取
2020/07/28 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
python实现应用程序在右键菜单中添加打开方式功能
2017/01/09 Python
Python多层装饰器用法实例分析
2018/02/09 Python
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
详解安装mitmproxy以及遇到的坑和简单用法
2019/01/21 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
什么是java序列化,如何实现java序列化
2012/11/14 面试题
武汉英思工程科技有限公司&ndash;ORACLE面试测试题目
2012/04/30 面试题
高中美术教学反思
2014/01/19 职场文书
趣味比赛活动方案
2014/02/15 职场文书
2014年政风行风评议工作总结
2014/10/21 职场文书
战友聚会致辞
2015/07/28 职场文书
个人自我鉴定怎么写?
2019/07/01 职场文书
浅谈JavaScript作用域
2021/12/06 Javascript
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android