python异常
程序运行时,经常会出现各种各样的错误,这些错误统称为异常。
python中常见异常:
| 异常 | 描述 |
| NameError | 尝试访问一个没有声明的变量引发的错误 |
| IndexError | 索引超出序列范围引发的错误 |
| IndentationError | 缩进错误 |
| ValueError | 传入的值错误 |
| KeyError | 请求一个不存在的字典关键字引发的错误 |
| IOError | 输入输出错误(如读取文件不存在) |
| ImportError | Import无法找到模块或from找不到名称 |
| AttributeError | 尝试访问未知的对象属性引发的错误 |
| TypeError | 类型不合适引发的错误 |
| MemoryError | 内存不足 |
| ZeroDivisionError | 除数为0引发的错误 |
| FileNotFoundError | 文件没有发现异常 |
一、Python异常处理语句
1、try…except语句处理异常
在Python中,提供了try..except语句用来捕获并处理异常,在使用的时候,把可能产生错的代码放在try语句中,把处理结果放在expect语句块中,这样当try语句块中出现错误后,将执行expect语句块中的代码,如果try语句块中没有错误,expect将不会执行,语法格式如下:
try:
block1
expect exceptname as alias:
block2
参数说明:
- block1:表示可能出现的错误代码
- exceptname:表示要捕获的异常名称,as alias表示为异常指定别名,如果except后面不加异常名称,表示捕获所有异常。
- block2:表示异常处理模块,可以输出固定信息,也可以通过别名输出信息
例如:定义size.py模块,定义函数hello(),并设置两个形式参数,通过try捕获异常并处理,如图:

expect后面可以同时处理多个异常,并用逗号分隔,命令如下:
except (ValueError,ZeroDivisionError)
下面例子定义文件未发现异常,使用FileNotFoundError,如图:


注意:如果捕获全部异常,直接使用except,后面什么都不接即可
2、try….except…else语句
在Python中,还有一种异常处理语句,try…except…else语句,其中else语句表示当try语句无法捕获到异常的时候要执行的语句,如果try语句发现异常的时候,else语句不会被执行.
例如:定义模块size.py,使用try语句捕获异常,如果没有捕获到将执行else语句中的代码,如图:

3、try…except…finally语句
完整的异常处理语句应该包含finally代码块,通常情况下无论异常有无发生,finally中的代码块都会被执行,语法格式如下:
try:
block1
except exceptionname as a:
block2
finally:
block3
可以将无论是否出现异常都要执行的代码块加入到finally语句块中。
说明:使用except语句是为了处理异常,无论是否发生异常,finally中的代码都会被执行,如果分配了有限的资源(如打开文件),则应将释放这些资源的代码放入到finally代码块中。
例如:定义模块size.py

4、使用raise语句抛出异常
如果某个函数或者方法可能产生异常,但是不想在当前函数或者方法中处理这个异常,则可以使用raise语句在当前函数或者方法中抛出异常,语法格式如下:
raise exceptionname
参数说明:
- exceptionname:表示可选参数,用于指定异常名称以及异常信息的相关描述,如果省略,那么会将当前错误信息原样输出。
例如:定义函数,并从键盘输入两个数字,将数字做比较,如果存在异常将抛出,下方调用的时候会处理,如图:

5、自定义异常类,并使用raise抛出,如图:

- 第3行:自定义异常类,名字为IntValueExcept,并且一定要继承Exception才行
- 第8行:如果函数接收的参数不是100,将抛出错误
- 第11行:调用函数并捕获错误
- 第12行:捕获错误后打印错误内容

注意:自定义异常类需要继承Exception的,然后类体直接使用pass即可
6、使用Exception来捕获所有错误
下面例子创建一个gong.txt文件夹,然后打开这个文件夹,此时第一个异常不会被触发,因为gong.txt确实存在,但是第二个会触发,因为gong.txt不是文件而是文件夹,如图:


修改上面例子,定义文件权限异常,并删除gong.txt,再次执行,如图:


从上面两个例子可以看出,Exception可以捕获全部异常,并根据 异常类型打印对应的错误信息


