try:
可能触发异常的语句
except 错误类型1 [as 变量2]:
异常处理语句1
except 错误类型2 [as 变量2]:
异常处理语句2
except (错误类型3,错误类型4,······) [as 变量3]:
异常处理语句3
except:
异常处理语句other
else:
未发生异常的语句
finally:
最终语句
异常流
说明:
except子句可以有一个或多个,但至少要有一个
as子句是用于绑定错误对象的变量,可以省略
else子句最多只能有一个,也可以省略
finally子句最多只能有一个,也可以省略不写
处理说明:
except子句用来捕获和处理某种类型的错误发生时,处理异常
except 子句会根据错误的类型进行匹配,如匹配成功则调用异常处理语句进行处理,然后程序转为正常状态
如果except子句没有匹配到任何类型的异常则转到except:子句
如果没有任何except子句进行处理,则程序的异常状态会继续下去,并向上层传递
如果没有异常,则执行else子句中的语句
最终执行finally子句中语句,finally里的代码块执行完毕,代表try语句执行完,则进入正常状态,try语句之外的语句还是照常执行
# 简单示例
def learn_try():
try:
raise ValueError("值错误")
except Exception as e:
print(e)
return e
else:
# else语句在无异常时执行
print("try中的else")
finally:
# finally语句是一定执行的语句
print("Done")
learn_try()
示例
def div_apple(n):
print("现有", n, '个苹果,请问分给几个人')
d = int(input("请输入人数: "))
print("每个人分", n/d, '个苹果')
try:
div_apple(10)
except ValueError: #转为正常状态
print('值转换错误异常')
print(ValueError)
except ZeroDivisionError as r: #打印r和打印前面的异常类型结果不同,r是异常信息,异常类型是一个地址,并转为正常状态
print("出现被除数为0的异常", end = '\n\n')
except: #转为正常状态
print('异常在以上语句中为捕捉到,本公主才出马')
else:
print("程序没有出现异常状态时,执行此语句")
finally:
print("我是必须执行的语句")
print("try语句外的语句")