python中异常处理 try except finally else 执行顺序详解

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语句外的语句")
发布了157 篇原创文章 · 获赞 85 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/Areigninhell/article/details/102723035