1. 程式人生 > >Python學習(8)——錯誤、除錯和測試

Python學習(8)——錯誤、除錯和測試

1、錯誤處理

(1)常見的錯誤型別和繼承關係看這裡:

https://docs.python.org/3/library/exceptions.html#exception-hierarchy

(2)如果錯誤沒有被捕獲,它就會一直往上拋,最後被Python直譯器捕獲,列印一個錯誤資訊,然後程式退出

        出錯的時候,一定要分析錯誤的呼叫棧資訊,才能定位錯誤的位置

(3)Python內建的logging模組可以非常容易地記錄錯誤資訊。

        通過配置,logging還可以把錯誤記錄到日誌檔案裡,方便事後排查

(4)如果要丟擲錯誤,可以根據需要定義一個錯誤的class,選擇好繼承關係,然後用raise語句丟擲一個錯誤的例項

(5)raise語句如果不帶引數,就會把當前錯誤原樣丟擲

 

2、除錯

(1)程式中如果到處充斥著assert,和print()相比也好不到哪去。不過,啟動Python直譯器時可以用-O引數來關閉assert

(2)logging的好處是,它允許你指定記錄資訊的級別,有debuginfowarningerror等幾個級別。當我們指定level=INFO時,logging.debug就不起作用了;同理,指定level=WARNING後,debug

info就不起作用了。logging的另一個好處是通過簡單的配置,一條語句可以同時輸出到不同的地方,比如console和檔案

(3)啟動Python的偵錯程式pdb,讓程式以單步方式執行,可以隨時檢視執行狀態

(4)pdb.set_trace()

        只需要import pdb,然後在可能出錯的地方放一個pdb.set_trace(),就可以設定一個斷點

(5)目前比較好的Python IDE有:

        Visual Studio Code:https://code.visualstudio.com/

,需要安裝Python外掛。

        PyCharm:http://www.jetbrains.com/pycharm/

        另外,Eclipse加上pydev外掛也可以除錯Python程式

 

3、單元測試

(1)寫單元測試需要引入Python自帶的unittest模組

(2)測試類從unittest.TestCase繼承,以test開頭的方法就是測試方法,不以test開頭的方法不被認為是測試方法,測試的時候不會被執行

(3)執行單元測試最簡單的方法是在指令碼檔案的最後加上兩行程式碼:

if __name__ == '__main__':
    unittest.main()

        另一種方法是在命令列通過引數-m unittest直接執行單元測試

(4)可以在單元測試中編寫兩個特殊的setUp()tearDown()方法,這兩個方法會分別在每呼叫一個測試方法的前後分別被執行

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143191629979802b566644aa84656b50cd484ec4a7838000

 

4、文件測試

(1)doctest非常有用,不但可以用來測試,還可以直接作為示例程式碼。通過某些文件生成工具,就可以自動把包含doctest的註釋提取出來。使用者看文件的時候,同時也看到了doctest

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319170285543a4d04751f8846908770660de849f285000