为什么要捕获异常?
为了当程序遇到bug时,不会直接崩溃,而是对异常进行捕获并处理,使整个程序继续运行
异常的捕获方式
捕获常规异常:
try:
可能发生错误的代码
except:
如果出现异常执行的代码
【一行语句中可能出现多个异常】
捕获指定异常:
try:
可能发生错误的代码
except 异常类型 as 异常对象:
如果出现异常执行的代码
【常见异常类型:NameError :访问未定义变量;UnboundLocalError :局部变量未赋值就引用;AttributeError :对象无此属性 / 方法;TypeError :类型不匹配(操作 / 函数不支持该类型);ValueError :类型正确但值非法;ZeroDivisionError:除数为 0】
【捕获全部异常使用Exception的异常类型】
捕获多个异常:
把要捕获的异常类型名字以元组的方式进行书写。
异常else表示的是如果没有异常要执行的代码
异常finally表示的是无论是否异常都要执行的代码
异常的传递性:
函数 / 代码块里抛出的异常若未被捕获,会沿调用栈逐层向上传递,直到被 try...except 处理,或到顶层导致程序崩溃。
可以利用异常的传递性在高层级捕获所有异常