最近在做項目時經(jīng)常會對try finally return以及raise的順序感到困惑, 于是做了個實驗:
先看第一段代碼, 這里的執(zhí)行順序是:
代碼1.png
從中可以看出:
finally畢竟是finally, 執(zhí)行在函數(shù)已經(jīng)寫明return的情況下依然會執(zhí)行, 甚至可以覆蓋return的結(jié)果.
再看一段代碼:
代碼2.png
從中可以看出:
raise同學(xué)直接截胡了return同學(xué);
Exception拋出的順序在finally執(zhí)行之后;
思考, 下面兩端代碼的輸出是?
image.png
image.png
結(jié)論:
break return raise這些語句只會使程序跳出try/except/finally對應(yīng)的block;
finally的block總是在整個try/except之后執(zhí)行;
return的結(jié)果可以被重寫;
函數(shù)的返回值在finally之后才''返回";