python錯誤調試和測試

錯誤調試和測試
在代碼編寫和運行過程中總會遇到各種錯誤,這是不可避免的;

  • 錯誤處理

1、錯誤基類BaseException類似java的try catch finally和Exception類;

try:
...
Except _ as _:
...
finally:

2、可以多層跨越處理,不用每一層都去捕獲錯誤,只需要在適當的位置捕獲一次就行了,因爲錯誤沒有捕獲時,他就會一直往上拋,最後被python解釋器捕獲並打印錯誤信息;

  • 調用堆棧

利用打印的信息,查找錯誤出現在那裏

  • 記錄錯誤

Logging模塊可以記錄錯誤信息並打logging.exception(e)拋出錯誤(raise)

可根據自己的需要創建一個自定義錯誤,raise如果不帶參數,就會把錯誤原樣拋出,在except中raise一個Error,還可以把一種類型的錯誤轉化成另外一種,但不建議亂來;
核心原則:我們應該清楚在什麼位置出現什麼錯誤;

  • 調試

1、斷言(assert):可以用參數-0來控制assert,當參數爲-0時assert相當於pass:

    assert n != 0, 'n is zero!'#n!=0時是Ture
    $ python3 -O err.py#參數控制

2、logging不會拋出錯誤,還可以輸出到文件:logging.info(),且分爲如下四個級別:Debug、Info、Warning、Error;

        logging.basicConfig(level=logging.INFO)

3、調試器pdb:python -m pdb err.py啓動調試器;
輸入1查看代碼;
輸入n單步執行代碼;
輸入p查看變量;
輸入q退出

4、pdb.set_trace()設置斷點,再要需要地方放置一個斷點即可;

  • 單元測試

1、用來對一個模塊、一個函數或者一個類進行正確性的檢測;
2、引入模塊import unittest;
3、編寫單元測試時,我們需要編寫一個測試類,從unittest.TestCase繼承;
4、test開偷纔會被認爲是測試方法;
5、最常用的斷言方法:assertEqual();
6、運行單元測試;

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

7、setUp和tearDown
這兩個方法會分別在每調用一個測試方法的前後分別被執行

  • 文檔測試

Python內置的“文檔測試”(doctest)模塊可以直接提取註釋中的代碼並執行測試,doctest嚴格按照Python交互式命令行的輸入和輸出來判斷測試結果是否正確。只有測試異常的時候,可以用“…”表示中間一大段煩人的輸出;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章