[oeasy]python0144_try的完全體_否則_else_最終_finally
try的完全體
回憶上次內(nèi)容
上次細(xì)化了主控程序(main.py)
導(dǎo)入(get_fruits.py)
處理(process.py)
輸出(output.py)
使用了 try 結(jié)構(gòu)
try
except
發(fā)現(xiàn)異常就報錯
輸入部分的錯誤
應(yīng)該在 輸入部分來報
具體怎么報呢???
完善輸入
輸入的時候
對于輸入內(nèi)容的驗證
應(yīng)該包括
于是 再修改代碼

輸入代碼 分成了
輸入 a
輸入 b
運行結(jié)果
如果 輸入錯誤數(shù)據(jù)
會在get_fruits.py中報錯

如果 輸入正確
沒有輸出 確認(rèn)信息

繼續(xù)修改

測試通過

這里面有個 else
應(yīng)該如何理解呢?
查詢幫助

在游樂場幫助 里面有關(guān)于
try 的比較明確的介紹

else
else的意思是否則
就是沒有發(fā)現(xiàn)異常時執(zhí)行的
else 是一個可選(optional)子句
在執(zhí)行完try中的內(nèi)容之后
不執(zhí)行 except 部分
只運行 else 部分
就從try中發(fā)現(xiàn)錯誤的位置跳出來
只執(zhí)行except部分
不執(zhí)行else部分
如果try中發(fā)現(xiàn)了指定異常
如果try中沒有發(fā)現(xiàn)指定的異常

每個輸入部分 都包括
else
except
try
int
input(“xxx”)
提示和輸入
嘗試轉(zhuǎn)化為整型數(shù)字
異常處理
無異常輸出
try 語句當(dāng)中
除了 else 之外
還有 finally
綜合一下
這就是 try 的完全體

注意!
都要有英文半角的冒號
都要通過 4 個字符的縮進(jìn)控制范圍
finally
finally如果存在
他是一個收尾的語句

try 之后
最后 總要執(zhí)行finally
要么 except
要么 else
無論是except 還是 else
如果執(zhí)行過程中
這個異常就被忽略了
但是這個異常沒有被處理
那么就把這個異常先存著
等待finally執(zhí)行之后
再拋出這個異常
還有任何的異常
如果遇到return break continue之類強制跳轉(zhuǎn)語句
這如何理解?
新建一個test.py進(jìn)行測試
理解finally
try里面有一個ValueError
不執(zhí)行后面的d = i / 0
跳到except

except中
沒有ValueError的處理辦法
ValueError沒有被處理
于是ValueError就存著
由于出現(xiàn)了異常
已經(jīng)進(jìn)入了except
無法進(jìn)入else
最后進(jìn)入finally執(zhí)行
輸出了At Last
執(zhí)行外finally語句塊
才把這個ValueError最后拋出來

這就是finally的執(zhí)行邏輯
回到main.py
整體結(jié)構(gòu)
這個結(jié)構(gòu)就是
典型的
面向過程
程序設(shè)計方法

有一個主要的流程控制模塊 main.py
有一個主要的決策者Guido一樣
就像python語言這個聲明
仁慈的獨裁者
徹底的仁慈
意味著 沒有主見和行動力下降
徹底的獨裁
則會 失去廣泛的幫助

仁慈和獨裁像
是矛盾的兩面
但是Guido卻很好地平衡了兩者
除了Guido之外
也有類似的特性
很多開源項目的老大

Guido是如何成長的呢?
擴(kuò)展視野
Guido 利用假期去美國做一些WorkShop
美國硅谷是當(dāng)時it的潮頭

很早接觸到了
互聯(lián)網(wǎng)的發(fā)展趨勢
互聯(lián)網(wǎng)
Guido做了一個瀏覽器grail

網(wǎng)絡(luò)集聚
網(wǎng)絡(luò)的能量越來大
從報紙、雜志、電視
發(fā)展到郵件、論壇和瀏覽器
這為python的發(fā)展做了很好的準(zhǔn)備
媒介
有人 就有 應(yīng)用
有應(yīng)用 就更有 人
于是會形成 正反饋
有了社區(qū) 就會有更多的人 加入社區(qū)
其實學(xué)編程 也是一樣
越熟練 就會越自信
越自信 也就會越熟練
總結(jié)
我們了解了 try 的完全體
無論是否發(fā)現(xiàn)異常最終都要運行的代碼塊
沒有發(fā)現(xiàn)異常時運行的代碼塊
發(fā)現(xiàn)異常時運行的代碼塊
嘗試運行
try
except
else
finally

發(fā)現(xiàn)導(dǎo)入部分
可以再分為兩個子模塊
一個輸入 a
一個輸入 b
可以再拆分么???
我們下次再說!??
藍(lán)橋->https://www.lanqiao.cn/courses/3584
github->https://github.com/overmind1980/oeasy-python-tutorial
gitee->https://gitee.com/overmind1980/oeasypython