合适:基础入门
前:这个是最近的一个任务,做好了,所以也放一篇到博客上吧。
就是代码我用图片的形式放出来了,不过妨碍学习哈。(也不是特别完善,
1、 理解异常的概念
2、 掌握处理异常的几种方式
3、 掌握raise和assert语句,会抛出自定义的异常
4、 掌握with和as环境安装器的使用
文章目录
异常简介,异常类,异常处理(部分))
一、 进行重点知识的讲解
1.什么是异常?
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
Python使用异常对象来表示异常状态,并在遇到错误时引发异常。异常对象未被处理(或捕 获)时,程序将终止并显示一条错误消息(traceback)。
在这里我提一下Java的异常:
java 中 处理异常有五个关键字:try catch finally throw throws
try:将可能发生的异常存放到try块中
catch:对异常进行捕获
finally:无论是否出现异常都执行
throw:在方法体中抛出异常
throws:在方法上抛出异常
python 中的异常处理相比java来说,要简单一些,python 中使用四个关键字来处理异常
try:捕获异常,类似于 java 中的 try
except:处理异常,类似于 java 中的 catch
finally:不管是否捕获到异常都会被执行,类似于 java 中 的 finally
raise:抛出异常,类似于 java 中的 throw//在方法中抛出异常
介绍一下:常见内部异常类
Exception 几乎所有的异常类都是从它派生而来的
AttributeError:引用属性或给它赋值失败时引发。
OsError:操作系统不能执行指定任务(如打开文件)时引发,有多个子类。
IndexError 使用序列中不存在的索引时引发 为LookupError的子类
KeyError 使用映射中不存在的键时引发,为LookupError的子类
TypeError 类型不正确。
NameError 找不到名称(变量)时引发。
ZeroDivisionError 在除法或者求模运算的第二个参数为零时引发
2.怎么处理异常?
捕捉异常是对异常进行处理,使用try/except语句。
try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。如果你不想在异常发生时结束你的程序,只需在try里捕获它。当我们使用try…except…语句,只要在try中任意一个语句出现问题,那么就直接执行except 跳过异常,然后继续执行程序。
这里使用ZeroDivisionError这个错误作为讲解,比较好理解
// 分母不能为零
###2.1.简单的一个except子句的异常处理
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190808182744534.png
2.2多个eccept子句
为同时捕获异常,可在try/except语句中再添加一个except子句。
2.3. 如果要使用一个except子句捕获多种异常,可在一个元组中指定这些异常。**
2.4.如果你觉得只要使用一段代码捕获所有的异常,只需在except语句中不指定任何异常类即可。
2.5. 可像条件语句和循环一样, 给try/except语句添加一个else子句
2.6.最佳的方式。
finally子句,可用于在发生异常时执行清理工作。这个子句是与try子句配套的。
2.7最后小结一下**
3.掌握raise和assert语句,会抛出自定义的异常**
在上面的try-except中我们都是被动等待异常出现然后进行捕获。事实上这些被动等待的异常本质上也是库函数使用raise主动抛出的,所以我们完全可以使用raise主动抛出异常,往深一步说我们可以使用raise抛出自己定义的异常。
主动抛出异常的好处,一是可以抛出在语法上不被认为是异常但在功能上我们认为是异常的情况,二是可以自定义自己的异常报错语句更方便异常的定位和排查。
注意,主动抛出的异常扔是异常,所以仍可以用try-except来捕获。
3.1assert语句
在开发一个程序时候,与其让它运行时崩溃,不如在它出现错误条件时就崩溃(返回错误),而assert的作用就是如此。
语法的格式:
它等价语句为
举个例子:
当我们学了挺多的之后肯定会想到Python自己定义的异常不够用,那我们怎么办?所以就需要我们能够多动动脑子,既然不够用,我们也可以向Python创始人学习,既然Python是人创造出来的,那么我们当然也可以自己定义属于我们需要的异常。
而这个实际是前人都考虑过的问题,那我们接下来就讲讲如何实现我们的这个想法。
首先我们了解自定义异常类的模板
举个例子:
4掌握with和as环境安装器。
with 是一个控制流语句,with可以用来简化try finally 代码,用起来也挺方便。
那我们先来个 try finally的例子
with语句操作文件对象例子:书P186
with as 语句的结构如下:
上下文表达式:返回一个下文管理器。
资源对象:可以是单一变量,也可以是元组。
对象的操作:with语句包裹的代码块。在执行代码块之前会调用上下文管理器的_enter_()方法。在执行 代码块后会执行_exit_()方法。
所以,with expresion variable的执行过程是,首先执行_enter_函数,如果使用了as子句,就把_enter_()方法的返回值赋值给as子句中的资源对象。
然后,执行with语句包裹的代码块;
无论在执行过程也没有出现异常,都会执行上下文管理器的_exit_()方法。
exit():”负责执行清理”工作 。如释放资源。
如书本P186-187
比较: