@[TOC](3.9学堂在线python学习笔记)
# 重要笔记
1. 我们将学习一些方法以便处理python中出现的错误,即代码不按预期运行或不正常运行
2. Exception将从代码层面处理,从而用户可以知道代码怎么错了,怎么处理它
3. Assertions保证所有输入输出的假设都正确
4. Exceptions错误种类多了去了,类似列表试图访问不存在的索引,类似试图对不合适的变量类型使用不合适的函数,或者更干脆的调用了一个没有提前声明的变量也会出错。
5. 还有一种错误是可能混合了不同变量运算:‘字符串乘除法很典型的错误’
6. 遇到错误怎么办?
6.1 很坏很坏的主意是根本不改bug,把那个地方用一个赋值给代替了,然后程序能够继续,但是最后的结果都是垃圾
6.2 或者想办法给出一个error信息,但是这很可能很复杂,特别是我们在树当中时不得不一级级将这些设定好的错误值反复传递回去,并且保证不会在各个路过的函数中间产生不必要的额外错误
6.3 更安全的方法是直接停止程序,并且发出“错误信息”
```py
raise Exception("Can't open grade files!")
#这就是一个很好的提出错误信息的方法
```
```py
try:
#code
except:
raise Exception("ERROR MESSAGES")
```
遇到错误,直接沿着调用链将错误信息传递到顶层,并且在顶层输出信息即可,但是注意,我也可以使用处理特定异常的处理器
例如,有时候我们想在继续之前清理一些代码,例如
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190309111816541.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTU5MzgyMQ==,size_16,color_FFFFFF,t_70)
在这个例子中就很好的处理了IO错误,遇到IO错误时直接关掉文件,遇到算数错误时返回错误位置,这让我们的代码变得更精细和耐用,到这里我们已经开始写一些特定类型错误的处理器了,可以写清理代码,也可以传递一些信息.
下面就是我们已经见过的常见错误信息
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190309112122583.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTU5MzgyMQ==,size_16,color_FFFFFF,t_70)
下面是一个对try,else,finally,exception语句的综合应用
try首先开始尝试执行代码
exception可以编写一个当try错误执行时的处理器
else会当try正确执行时被执行
finally无论如何上面的情况(哪怕是break)都会执行
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190309112700323.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTU5MzgyMQ==,size_16,color_FFFFFF,t_70)
这是我写的小例子
```py
try:
while True:
print(1)
break
except ZeroDivisionError:
print("ERROR")
else:
print("Successfully executed the code")
finally:
print("Executing the finally clause")
```
请特别注意,上面的错误处理器的名字ZeroDivisionError不是随便乱起名的,只有python内部识别的特定ERROR类型才可以作为exception的条件,正如下图列出部分
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190309112122583.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTU5MzgyMQ==,size_16,color_FFFFFF,t_70)
网友评论