10.3異常
Python使用被稱為異常的特殊對象來管理程序執(zhí)行期間發(fā)生的錯誤。每當發(fā)生讓Python不知所措的錯誤時,它都會創(chuàng)建一個異常對象。如果你編寫了處理該異常的代碼,程序?qū)⒗^續(xù)運行;如果你未對異常進行處理,程序?qū)⑼V?,并顯示一個traceback,其中包含有關(guān)異常的報告。
異常是使用try-except代碼塊處理的,可以執(zhí)行指定的操作,使用try-except代碼塊后即使出現(xiàn)了異常程序也將繼續(xù)運行。
10.3.1處理ZeroDivisionError異常
10.3.2使用try-except代碼塊
可編寫一個try-except代碼塊來處理可能引發(fā)的異常,
使用try-except代碼塊
如果try代碼塊中的代碼運行起來沒有問題,Python將跳過except代碼塊;
如果try代碼塊中的代碼導致了錯誤,Python將查找這樣的except代碼塊,并運行其中的代碼,即其中指定的錯誤與引發(fā)的錯誤相同。
10.3.3使用異常避免崩潰
如果程序能夠妥善地處理無效輸入,就能再提示用戶提供有效輸入,而不至于崩潰。
使用異常避免崩潰
10.3.4 else代碼塊
通過將可能引發(fā)錯誤的代碼放在try-except代碼塊中,可提高這個程序抵御錯誤的能力。
加入到try-except代碼塊中
else代碼塊
try-except-else代碼塊的工作原理:
1. Python嘗試執(zhí)行try代碼塊中的代碼;只有可能引發(fā)異常的代碼才需要放在try語句中
2.有時候,有一些僅在try代碼塊成功執(zhí)行時才需要運行的代碼
3.這些代碼應(yīng)放在else代碼塊中。except代碼塊告訴Python,如果它嘗試運行try代碼塊中的代碼時引發(fā)了指定的異常
10.3.5處理FileNotFoundError異常
找不到文件、文件名不正確、文件不存在等可使用try-except代碼塊以直觀的方式進行處理。
打開alice.txt
報錯FileNotFoundError
加入try-except代碼塊
打印變量message中的內(nèi)容
10.3.6分析文本
使用方法split(),它根據(jù)一個字符串創(chuàng)建一個單詞列表。
方法split()
它根據(jù)一個字符串創(chuàng)建一個單詞列表,字符串調(diào)用方法split()
方法split()以空格為分隔符將字符串分拆成多個部分,并將這些部分都存儲到一個列表中。結(jié)果是一個包含字符串中所有單詞的列表,雖然有些單詞可能包含標點。
計算文件大致包含多少個單詞
10.4存儲數(shù)據(jù)
程序把用戶提供的信息存儲在列表和字典等數(shù)據(jù)結(jié)構(gòu)中,模塊json來存儲數(shù)據(jù)
模塊json讓你能夠?qū)⒑唵蔚腜ython數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)儲到文件中,并在程序再次運行時加載該文件中的數(shù)據(jù)。
使用json在Python程序之間分享數(shù)據(jù)。
以JSON格式存儲的數(shù)據(jù)與使用其他編程語言的人分享。
注意JSON(JavaScript Object Notation)格式最初是為JavaScript開發(fā)的,但隨后成了一種常見格式,被包括Python在內(nèi)的眾多語言采用。
10.4.1使用json.dump()和json.load()
編寫一個存儲一組數(shù)字的簡短程序,再編寫一個將這些數(shù)字讀取到內(nèi)存中的程序。
第一個程序?qū)⑹褂?b>json.dump()來存儲這組數(shù)字,
第二個程序?qū)⑹褂?b>json.load()
函數(shù)json.dump()接受兩個實參:要存儲的數(shù)據(jù)以及可用于存儲數(shù)據(jù)的文件對象。
通常使用文件擴展名.json來指出文件存儲的數(shù)據(jù)為JSON格式。
json.dump()
numbers.json
json.load( )
數(shù)字列表
這是一種在程序之間共享數(shù)據(jù)的簡單方式。
10.4.2保存和讀取用戶生成的數(shù)據(jù)
對于用戶生成的數(shù)據(jù),使用json保存它們大有裨益,因為如果不以某種方式進行存儲,等程序停止運行時用戶的信息將丟失.
10.4.3重構(gòu)
重構(gòu):
代碼能夠正確地運行,但可做進一步的改進——將代碼劃分為一系列完成具體工作的函數(shù)。
重構(gòu)的好處:
重構(gòu)讓代碼更清晰、更易于理解、更容易擴展。
???eh?1