Python錯誤、調試和測試
1.錯誤處理
Python內置了 的錯誤處理機制。
如果認為代碼可能出錯,用try運行代碼;如果代碼執行出錯,直接跳轉到except語句,except語句可以有多個;如果沒有錯誤,會執行else語句;如果有finally,則最後執行finally語句。如:
錯誤信息是一個調用棧,可以跟蹤錯誤信息。
2.logging列印
Python內置的logging模塊可以容易的記錄錯誤信息。
3.raise拋出錯誤
可以自己定義錯誤類型,然後通過 語句拋出錯誤的實例。
4.調試
簡單的辦法是通過print()列印錯誤信息,還有一種是使用斷言(assert)。凡是可以用print的地方都可以都可以使用斷言。
啟動Python解釋器時可以用-O(字母O)參數來關閉assert:
前面說的logging其實可以更加強力,它允許指定記錄信息的級別。信息有debug,info,warning,error等幾個級別。比如:
當指定level為info時,debug就不起作用了;指定為warning時,debug和info就不起作用了。
pdb是另一種調試方法,它是Python的調試器,讓程序以單步的方式運行。當然通過IDE進行單步調試是最好的。
5.單元測試
通過使用Python自帶的unittest模塊,可以進行單元測試。編寫一個類繼承unittest.TestCase。
上面的Dict類的單元測試可以寫為:
以test開頭的方法就是測試方法,不以test開頭的方法不被認為是測試方法,測試的時候不會被執行。對每一類測試都需要編寫一個test_xxx()方法。
單元測試中提供了很多內置的條件判斷。通過調用這些方法就可以斷言輸出是否是期望的。
單元測試的運行可以在後面加上:
將Python作為一個正常的腳本運行。或者通過命令行參數運行。
當然用直接用IDE也是可以的。
單元測試有兩個特殊的方法, 和 方法,這兩個方法會分別在每調用一個測試方法的前後分別被執行。
setUp()和tearDown()方法有什麼用呢?設想你的測試需要啟動一個資料庫,這時,就可以在setUp()方法中連接資料庫,在tearDown()方法中關閉資料庫,這樣,不必在每個測試方法中重複相同的代碼。
6.文檔測試
Python內置的「文檔測試」(doctest)模塊可以直接提取注釋中的代碼並執行測試。
doctest嚴格按照Python互動式命令行的輸入和輸出來判斷測試結果是否正確。只有測試異常的時候,可以用...表示中間一大段的輸出。
運行時什麼輸出都沒有,這時正常的。但是如果代碼有錯誤,比如沒有getattr方法,文檔測試就會出錯。
看最後兩行代碼,當模塊正常導入時,doctest不會被執行。只有在命令行直接運行時,才執行doctest。


※Python數據預處理:使用Dask和Numba並行化加速
TAG:Python |