一 异常

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异常处理详解(基础篇十一)相关推荐

  1. python 异常处理 库_python异常处理详解

    本节主要介绍Python中异常处理的原理和主要的形式. 1.什么是异常 Python中用异常对象来表示异常情况.程序在运行期间遇到错误后会引发异常.如果异常对象并未被处理或捕获,程序就会回溯终止执行. ...

  2. python源程序文件的扩展名_python程序文件扩展名知识点详解

    python程序文件的扩展名称是什么 python程序的扩展名有.py..pyc..pyo和.pyd..py是源文件,.pyc是源文件编译后的文件,.pyo是源文件优化编译后的文件,.pyd是其他语言 ...

  3. Python 异常处理 详解

    Python 异常处理 详解 1.错误和异常 1.1 错误 `Error` 1.2 异常 `Exception` 1.3 总结 2.产生异常 3.捕获异常 3.1 语法 3.2 示例 1 3.3 示例 ...

  4. 多重句柄怎么处理_golang异常处理详解

    小熊今天有意外收获,忍不住给大家分享我愉快的心情!昨天中午下楼取外卖的时候被一个同事认出来了,他问我:"是不是[编程三分钟]的作者,文章写的不错". 你知道吗!我当时就是一愣,然后 ...

  5. 经验积累①:关于设备程序的版本迭代方案详解

    关于设备程序的版本迭代方案详解 一.案例描述 对于嵌入式应用层来说,需要对设备的很多参数进行保存,为了使得这些配置参数掉电不丢失,因此在flash中生成配置文件用于保存设备参数,每当设备重启后,将参数 ...

  6. cat命令详解_好程序员Python培训之详解eval好与坏

    好程序员Python培训之详解eval好与坏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们一起来看一下吧. eval是Python的一个内置函数,这个函数的作用 ...

  7. 微信小程token_微信小程序url与token设置详解

    微信小程序url与token设置详解 新浪云应用sae的代码里创建一个weixin.php文件,写入以下代码 isValid(); class wechatAPI { public function ...

  8. Spring MVC异常处理详解 ExceptionHandler good

    Spring MVC异常处理详解 ExceptionHandler good 参考文章: (1)Spring MVC异常处理详解 ExceptionHandler good (2)https://ww ...

  9. Spring MVC异常处理详解

    Spring MVC异常处理详解 参考文章: (1)Spring MVC异常处理详解 (2)https://www.cnblogs.com/xinzhao/p/4902295.html 备忘一下.

最新文章

  1. java 反射模式_java 设计模式——反射机制的应用
  2. 三相逆变器双pi控制器参数如何调节_Boost 变换器 PI参数设计举例
  3. Advanced C++ -- Logic Constness and Bitwise Constness
  4. AOE网与关键路径简介
  5. mysql group by null_MySQL无GROUP BY直接HAVING返回空的问题分析
  6. 计算机桌面上的公文包怎么加密,公文包的用法
  7. mac php csv 乱码,php 生成csv mac下乱码
  8. linux实现内存共享,Linux共享内存实现
  9. java POI为excel添加水印
  10. Oracle函数之ratio_to_report函数
  11. 【从嵌入式视角学习香山处理器】四、Chisel语言基础
  12. 油气井钻井风险预测与控制系统——需求分析
  13. zk-snark之R1CS-QAP
  14. oracle10g驱动怎么安装,oracle10g安装后怎么使用
  15. 微信小程序医院门诊体检预约信息管理系统SSM-JAVA【数据库设计、论文、源码、开题报告】
  16. 高炉炼铁车间人工巡视被淘汰是工业发展的必然
  17. MySQL 8.0 OCP (1Z0-908)有中文考试了
  18. Java 读large excel Out of memory解决办法
  19. 无线网卡抓包(Windows)
  20. Linux下载文件命令wget的一些用法

热门文章

  1. HashMap暴力枚举(洛谷P1765题题解,Java语言描述)
  2. 洛谷P2955题解(Java语言描述)
  3. js中startsWith 函数不能在任何浏览器兼容的问题
  4. CentOS7 使用firewald
  5. python数据结构之 set
  6. Linux学习之路01
  7. AS3编码规范(转)
  8. C/C++之QT攻略——在QT中容易遇到的那些坑,千万别踩了!
  9. 叫做 Nanshan即时通讯 贪婪型
  10. IBM发布32纳米芯片技术 明年下半年量产