代码片段1
i=0
try:
i = i + 1 #i=1
print ("try start")
raise Exception()
return i #出现异常后不执行
except Exception as error:
print ('exception:')
i+=1 #出现异常后执行到这i=2
return i
finally:
print ('finally')
i+=1
return i
print ("xxxx") #return后的语句不会执行
- 代码出现异常,代码执行顺序 try > exception > finally ,返回finally的return
- 代码未出现异常,代码执行顺序为 try > finally, 返回为finally的return
代码片段2
i=0
try:
i = i + 1 #i=1
print ("try start")
raise Exception() # to exception
i = i + 1 # 异常处理完成后, 会继续执行 i = 3
return i
except Exception as error:
print ('exception:')
i+=1 # 出现异常后执行到这i=2
return i
finally:
print ('finally')
i+=1
return i
print ("xxxx") #return后的语句不会执行
- 代码出现异常执行顺序为,try > exception > try >…> finally, 返回为finally的return
- 代码未出现异常执行顺序为,try > finally , 返回为finally的return
总结
- try …except…finally 异常语句处理时,如果有finally的retrun,则会返回finally的return
- try…发生异常后,代码转到except模块。except处理完成后,代码控制权交由try控制,继续执行剩下的代码。代码如果有finally,则返回finally的的return,如果无则需根据代码最后执行结果是由try控制还是except控制,决定retrun的值
- try , except,有retrun时不会立即返回,会先存入堆栈中,待程序运行finally结束后,取堆栈中的第一个值返回。