详解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 相关文章推荐
编写自定义的Django模板加载器的简单示例
Jul 21 Python
Python排序搜索基本算法之选择排序实例分析
Dec 09 Python
利用Python读取txt文档的方法讲解
Jun 23 Python
Python json模块dumps、loads操作示例
Sep 06 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
django 控制页面跳转的例子
Aug 06 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
Aug 12 Python
解决python中的幂函数、指数函数问题
Nov 25 Python
用什么库写 Python 命令行程序(示例代码详解)
Feb 20 Python
keras实现调用自己训练的模型,并去掉全连接层
Jun 09 Python
Jupyter Notebook 远程访问配置详解
Jan 11 Python
python中%格式表达式实例用法
Jun 18 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无限分类的类
2007/01/02 PHP
6种php上传图片重命名的方法实例
2013/11/04 PHP
Apache连接PHP后无法启动问题解决思路
2015/06/18 PHP
php自定义类fsocket模拟post或get请求的方法
2015/07/31 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
JSQL 批量图片切换的实现代码
2010/05/05 Javascript
微信公众号 客服接口的开发实例详解
2016/09/28 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
2016/12/27 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
详解React项目中碰到的IE问题
2019/03/14 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
在Django中使用Sitemap的方法讲解
2015/07/22 Python
Python使用PyCrypto实现AES加密功能示例
2017/05/22 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
python程序文件扩展名知识点详解
2020/02/27 Python
Python实现动态给类和对象添加属性和方法操作示例
2020/02/29 Python
纯CSS实现预加载动画效果
2017/09/06 HTML / CSS
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
2013/01/30 HTML / CSS
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
DJI大疆德国官方商城:大疆无人机
2018/09/01 全球购物
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
财务会计实习报告体会
2013/12/20 职场文书
2015年五一劳动节演讲稿
2015/03/18 职场文书
2016大学优秀学生干部事迹材料
2016/03/01 职场文书
在 Golang 中实现 Cache::remember 方法详解
2021/03/30 Python
Nginx工作原理和优化总结。
2021/04/02 Servers
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS