pyqt5 捕获异常确保程序不退出_Python异常处理详解(基础篇十一)
一 异常
1 什么是异常?
示例:
说明:
打开一个不存在的文件123.txt,当找不到123.txt 文件时,就会抛出给我们一个IOError类型的错误,No such file or directory:123.txt (没有123.txt这样的文件或目录)
异常:
当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"
2 捕获异常
<1> 捕获异常 try...except...
示例:
说明:
- 此程序看不到任何错误,因为用except 捕获到了IOError异常,并添加了处理的方法
- pass 表示实现了相应的实现,但什么也不做;如果把pass改为print语句,那么就会输出其他信息
总结:
- 把可能出现问题的代码,放在try中
- 把处理异常的代码,放在except中
<2> except捕获多个异常
示例:
想一想:
上例程序,已经使用except来捕获异常了,为什么还会看到错误的信息提示?
答:
except捕获的错误类型是IOError,而此时程序产生的异常为 NameError ,所以except没有生效
修改后:
实际开发中,捕获多个异常的方式,如下:
小总结:
- 当捕获多个异常时,可以把要捕获的异常的名字,放到except 后,并使用元组的方式仅进行存储
<3> 获取异常的信息描述
<4> 捕获所有异常
<5> else
在if中,它的作用是当条件不满足时执行的实行;同样在try...except...中也是如此,即如果没有捕获到异常,那么就执行else中的事情
<6> try...finally...
try...finally...语句用来表达这样的情况:
在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。 比如文件关闭,释放锁,把数据库连接返还给连接池等
说明:
test.txt文件中每一行数据打印,但是我有意在每打印一行之前用time.sleep方法暂停2秒钟。这样做的原因是让程序运行得慢一些。在程序运行的时候,按Ctrl+c中断(取消)程序。
我们可以观察到KeyboardInterrupt异常被触发,程序退出。但是在程序退出之前,finally从句仍然被执行,把文件关闭。
3 异常的传递
<1> try嵌套中
总结:
- 如果try嵌套,那么如果里面的try没有捕获到这个异常,那么外面的try会接收到这个异常,然后进行处理,如果外边的try依然没有捕获到,那么再进行传递。
<2> 函数嵌套调用中
总结:
- 如果一个异常是在一个函数中产生的,例如函数A---->函数B---->函数C,而异常是在函数C中产生的,那么如果函数C中没有对这个异常进行处理,那么这个异常会传递到函数B中,如果函数B有异常处理那么就会按照函数B的处理方式进行执行;如果函数B也没有异常处理,那么这个异常会继续传递,以此类推。。。如果所有的函数都没有处理,那么此时就会进行异常的默认处理,即通常见到的那样
- 注意观察上图中,当调用test3函数时,在test1函数内部产生了异常,此异常被传递到test3函数中完成了异常处理,而当异常处理完后,并没有返回到函数test1中进行执行,而是在函数test3中继续执行
4 自定义异常
你可以用raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类
下面是一个引发异常的例子:
注意点:
以上程序中,关于代码#super().__init__()
的说明
这一行代码,可以调用也可以不调用,建议调用,因为
__init__
方法往往是用来对创建完的对象进行初始化工作,如果在子类中重写了父类的__init__
方法,即意味着父类中的很多初始化工作没有做,这样就不保证程序的稳定了,所以在以后的开发中,如果重写了父类的__init__
方法,最好是先调用父类的这个方法,然后再添加自己的功能
5 抛出异常
可以用raise语句来引发一个异常
pyqt5 捕获异常确保程序不退出_Python异常处理详解(基础篇十一)相关推荐
- python 异常处理 库_python异常处理详解
本节主要介绍Python中异常处理的原理和主要的形式. 1.什么是异常 Python中用异常对象来表示异常情况.程序在运行期间遇到错误后会引发异常.如果异常对象并未被处理或捕获,程序就会回溯终止执行. ...
- python源程序文件的扩展名_python程序文件扩展名知识点详解
python程序文件的扩展名称是什么 python程序的扩展名有.py..pyc..pyo和.pyd..py是源文件,.pyc是源文件编译后的文件,.pyo是源文件优化编译后的文件,.pyd是其他语言 ...
- Python 异常处理 详解
Python 异常处理 详解 1.错误和异常 1.1 错误 `Error` 1.2 异常 `Exception` 1.3 总结 2.产生异常 3.捕获异常 3.1 语法 3.2 示例 1 3.3 示例 ...
- 多重句柄怎么处理_golang异常处理详解
小熊今天有意外收获,忍不住给大家分享我愉快的心情!昨天中午下楼取外卖的时候被一个同事认出来了,他问我:"是不是[编程三分钟]的作者,文章写的不错". 你知道吗!我当时就是一愣,然后 ...
- 经验积累①:关于设备程序的版本迭代方案详解
关于设备程序的版本迭代方案详解 一.案例描述 对于嵌入式应用层来说,需要对设备的很多参数进行保存,为了使得这些配置参数掉电不丢失,因此在flash中生成配置文件用于保存设备参数,每当设备重启后,将参数 ...
- cat命令详解_好程序员Python培训之详解eval好与坏
好程序员Python培训之详解eval好与坏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们一起来看一下吧. eval是Python的一个内置函数,这个函数的作用 ...
- 微信小程token_微信小程序url与token设置详解
微信小程序url与token设置详解 新浪云应用sae的代码里创建一个weixin.php文件,写入以下代码 isValid(); class wechatAPI { public function ...
- Spring MVC异常处理详解 ExceptionHandler good
Spring MVC异常处理详解 ExceptionHandler good 参考文章: (1)Spring MVC异常处理详解 ExceptionHandler good (2)https://ww ...
- Spring MVC异常处理详解
Spring MVC异常处理详解 参考文章: (1)Spring MVC异常处理详解 (2)https://www.cnblogs.com/xinzhao/p/4902295.html 备忘一下.
最新文章
- java 反射模式_java 设计模式——反射机制的应用
- 三相逆变器双pi控制器参数如何调节_Boost 变换器 PI参数设计举例
- Advanced C++ -- Logic Constness and Bitwise Constness
- AOE网与关键路径简介
- mysql group by null_MySQL无GROUP BY直接HAVING返回空的问题分析
- 计算机桌面上的公文包怎么加密,公文包的用法
- mac php csv 乱码,php 生成csv mac下乱码
- linux实现内存共享,Linux共享内存实现
- java POI为excel添加水印
- Oracle函数之ratio_to_report函数
- 【从嵌入式视角学习香山处理器】四、Chisel语言基础
- 油气井钻井风险预测与控制系统——需求分析
- zk-snark之R1CS-QAP
- oracle10g驱动怎么安装,oracle10g安装后怎么使用
- 微信小程序医院门诊体检预约信息管理系统SSM-JAVA【数据库设计、论文、源码、开题报告】
- 高炉炼铁车间人工巡视被淘汰是工业发展的必然
- MySQL 8.0 OCP (1Z0-908)有中文考试了
- Java 读large excel Out of memory解决办法
- 无线网卡抓包(Windows)
- Linux下载文件命令wget的一些用法