try:
理解它是扫描器,将可能出现异常的代码放入其中;
如果在执行过程中出现异常对象了,扫描器会立即察觉到此异常对象,
但是它没有处理它的能力,所以会将异常对象给到except(捕获器)进行解决
except:
理解它是捕获器,后面可以定义异常类型,并且和as关键字配合使用;
定义多个except也是合法的,但是它的执行顺序,由上往下,一旦匹配上就执行except,之后的不执行了;
将匹配成功的异常对象捕获住,并且kill;顺便会直接except范围内的逻辑代码
finally:
将一定需要执行的代码,放入finally中;记住:finally一定会被执行
举例:像关闭文件操作、断开数据库连接操作等都可以放入到finally中
else:
位置在finally前,except后;效果类似于循环
没有异常对象出现,else就会被执行;反之不会被执行
raise:
手动抛出一个异常类对象,后面紧跟异常类型(msg)
格式:
1).
try:
语句块1
except 异常类型1 as 变量名:
语句块2
except 异常类型2 as 变量名:
语句块3
except 异常类型3 as 变量名:
语句块4
finally:
语句块5
【注意】
以上格式有多个并列的except存在,
如果它们之间没有子父类的关系(互斥),那么谁上谁下无所谓
如果它们之间有子父类的关系(包含),那么小的在上,大的在下
2).
try:
语句块1
except (异常类型1,异常类型2,...) as 变量名:
语句块2
finally:
语句块3
【注意】
一个except具备多个能力(捕获多种异常对象的能力)
3).
try:
语句块1
except 异常类型1 as 变量名:
语句块2
except 异常类型2 as 变量名:
语句块3
except 异常类型3 as 变量名:
语句块4
except:
语句块5
finally:
语句块6
【注意】
如果定义了except,那么它必须是最后一个except,它可以理解为是Exception的简化版
注意事项:
1).try...finally这种格式是合法的,但是丧失解决异常对象的能力
2).else语句必须配合except使用,出现的位置在except的后面
3).常见的运行时异常类型:
ZeroDivisionError: 分母不能为的异常
IndexError:下标越界的异常
FileNotFoundError:文件找不到的异常
TypeError:类型有误的异常
NameError:没有被定义就使用的异常
4).with..as语句可以优化单独的open操作,体现:不用关闭文件
总结:学习异常很简单就5个关键字:try except finally else raise