python异常处理
try:
这里放置可能出错的代码
except Exception as e:
这里放置try出现异常时,对于异常进行处理的代码
else:
这里放置try没有出现异常继续执行的代码
finally:
这里放置的是无论代码是否出现异常都会执行的代码
作为一名python初学者,我对异常处理的finally很感兴趣
对于finally功能的一般解释
无论 try 块是否引发错误,都将始终执行 finally 块
开始看起来没什么问题
比如下面这段代码:
def add_num():
try:
num1 = 1
num2 = 0
res = num1 / num2
print(f'结果是:{res}')
except Exception as e:
print(f"出错了,错误类型是:{e}")
finally:
print("add_num函数执行完毕")
print(add_num())
# 出错了,错误类型是:division by zero
# add_num函数执行完毕
# None
但是如果except语句里的print变成了return,会怎么样呢
我们知道函数里遇到return 程序就结束了,但是你看下面的代码,奇怪的事出现了
def add_num():
try:
num1 = 1
num2 = 0
res = num1 / num2
except Exception as e:
return f"出错了,错误类型是:{e}"
finally:
print("add_num函数执行完毕")
print(add_num())
# add_num函数执行完毕
# 出错了,错误类型是:division by zero
异常处理中遇到return的时候竟然跳过了,跑去执行finally里的语句,最后才执行return
遇到这种情况,我很是疑惑,专门去查了资料,才明白为什么这样
对异常处理中finally正确完整的解释
无论前面try和except怎么样,python一定会保证finally的语句得执行完!
Python的一切设计都是围绕着这个核心思想来的,费尽心机就是在做这件事情。
因此,前面try子句(clause),或者except子句中如果有会导致程序终止的异常,比如return,那么 python会先把这个封存起来,等到finally执行完再把异常抛出来
所以你能看到异常出现在 finally输出结果之后的,意不意外?