文件和異常2.0 day 11.5
學(xué)習(xí)計劃:
- day11中剩下的文件異常
- day4未做的事(這個不急偷遗,可留在后面)
- PEP8的續(xù)行標(biāo)準(zhǔn)
- 之前的案例day7和day9
- 簡明教程進(jìn)行補(bǔ)充
學(xué)習(xí)內(nèi)容:
- 為什么要處理異常?
- 首先明白:異常不是錯誤,我們沒有必要去警惕他,害怕他,他只是出乎我們意料之外的事
- 異常的處理可以使得程序員真實(shí)的工作和異常的處理分離,使得程序代碼更加簡潔流暢,邏輯更加清晰丘薛。即不會因?yàn)榭赡艹霈F(xiàn)的錯誤,為此設(shè)立一大堆if語句邦危,并且每個錯誤都要思考處理的方法洋侨。有了異常處理之后,我們只需要將異常拋出倦蚪,然后控制器捕獲希坚,進(jìn)行處理。
我認(rèn)為审丘,異常處理——- 對于程序員就是把所有的問題做個標(biāo)記(有點(diǎn)類似超鏈接)吏够,繼續(xù)書寫原本的工作;
- 對于計算機(jī)來說滩报,就是锅知,前面拋出異常,后臺捕獲異常分析異常類型然后處理脓钾,再反饋回前面售睹;
- 對于用戶來說,如果沒有異常處理可训,一旦遇到問題就是程序終止昌妹,會獲得非常不好的體驗(yàn),但是使用異常處理握截,使得用戶獲得異常的內(nèi)容然后進(jìn)行下一步操作飞崖。
舉個例子:(該例子來自為什么使用異常處理機(jī)制)
- 從用戶角度,當(dāng)我們在淘寶上買東西時谨胞,如果沒有登錄就點(diǎn)擊購買固歪,那么會跳出頁面顯示請登錄,然后我們就點(diǎn)擊轉(zhuǎn)到登錄頁面胯努。如果沒有異常處理呢牢裳?這時頁面可能會出現(xiàn)一大堆代碼,表示系統(tǒng)崩潰啦叶沛,是不是很不開心蒲讯,尤其在雙十一的時候灰署,恨不得摔了手機(jī)判帮。
- 從程序員角度出發(fā)局嘁,程序員先生要設(shè)計一個用戶購買物品的程序脊另,重點(diǎn)在于購買的流程偎痛,而不是在購買時出現(xiàn)的一大堆異常,比如說沒有登陸谓谦,用戶是黑名單用戶反粥,密碼出錯等等,好像需要寫一大堆if語句進(jìn)行判斷疲迂,那程序員先生后面的購買結(jié)算之類的不寫了嗎?這時才顿,采用異常處理,拋出異常尤蒿,待程序員先生寫完整個流程后郑气,調(diào)試好整個流程后。再編寫編寫一段代碼告訴編輯器如何處理這些異常腰池。
(感覺我好像在給異常處理打廣告尾组,但其實(shí)我也只是知曉了皮毛,具體如何處理示弓,什么時候處理讳侨,還要真正接觸到案列或者項(xiàng)目才能深刻體會,這里只是提供一個抽象的理解)
-
異常處理的方法(詳細(xì)可見總結(jié):Python中的異常處理):
try-except-finally
- 用于文件的
with
-
raise
:一方面奏属,捕獲異常后再拋出時跨跨,raise
后面不加關(guān)鍵詞 ;另一方面拍皮,自主拋出異常時歹叮,raise
Error_type(異常類型)
(Error_value(異常內(nèi)容)
)
raise NameError ('該名字已使用!')
-
getattr()
用于屬性不確定铆帽,沒有賦值時使用
對python的話:
未做的事:
- 異常處理之后的事情咆耿,即拋出異常后,怎么捕獲資源然后寫后續(xù)操作