錯誤 除錯和測試

2021-09-26 08:10:44 字數 1789 閱讀 7632

如果發生錯誤,可以事先約定返回乙個錯誤**,這樣就可以知道是否有錯以及原因。eg開啟檔案的函式open(),成功時返回檔案描述符(就是乙個整數),出錯時返回-1.

用錯誤碼來表示是否出錯十分不便。

錯誤處理機制:try—except—finally

try:

******

except ***x as e:

******

else:

finally

所有的錯誤型別都繼承自baseexception,所以在使用except時需要注意的是,它不但捕獲該型別的錯誤,會把子型別也一網打盡

python所有的錯誤都是從baseexception類派生的,常見的錯誤型別和繼承關係

如果錯誤沒有**獲,它會被一直往上拋,最後被python直譯器捕獲,列印乙個錯誤資訊,然後程式退出。

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

如果不捕獲錯誤,讓python直譯器列印出錯誤堆疊,但是程式也被結束了。我們捕獲錯誤就可以把錯誤堆疊列印出來,然後分析錯誤原因,同時讓程式繼續執行下去

py內建的logging模組可以容易地記錄錯誤資訊。配置後,logging還可以把錯誤記錄到日誌檔案裡,方便事後排查。

因為錯誤是class,捕獲乙個錯誤就是捕獲到該class的乙個例項。因此,錯誤並不是憑空產生的,而是有意建立並丟擲的。

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

如果可以選擇python已有的內建的錯誤型別(比如valueerror,typeerror),盡量使用python內建的錯誤型別。

raise語句如果不帶引數,就會把當前錯誤原樣丟擲。此外,在except中raise乙個error,還可以把一種型別的錯誤轉化成另一種型別

第一種就是在下天天用的。。。用print列印出來變數

用assert代替print

如果斷言後面的語句失敗 丟擲異常語句

最後啟用py直譯器時可以用-o引數來關閉assert:

$ python -o err.py

關閉後所有的assert語句當成pass來看

用logging代替print,比起assert,logging不會丟擲錯誤,而且可以輸出到檔案

logging的有點:允許指定記錄資訊的級別,有debug,info,waring,erro幾個級別。

import logging

logging.basicconfig(level=logging.info)

第四種啟動py的偵錯程式pdb,讓程式以單步方式執行,可以隨時檢視執行狀態。

但是太麻煩了。

補充一種除錯方法

也是用pdb,但不需要單步執行,我們只需要import pdb,然後在可能跟出錯的地方放乙個pdb.set_trace(),就可以設定乙個斷點。

執行**,程式會自動在這一行暫停並進入pdb除錯模式,可以用命令 p 檢視變數,或者用命令c繼續執行

總結logging是終極**的呀。

tdd 測試驅動開發

單元測試是用來對乙個模組、乙個函式或者乙個類來進行正確性檢驗的測試工作。

ifname==『main』:

unittest.main()

第二種方法 命令列通過引數 -m unittest 直接執行 推薦-可以一次

這兩個方法會分別在每呼叫乙個測試方法的前後分別被執行。

如果測試需要啟動乙個資料庫,可以在setup()方法中連線資料庫,在teardown()方法中關閉資料庫,這樣不必在每個測試方法中重複相同的**。

錯誤 除錯和測試

在程式執行過程中,總會遇到各種各樣的錯誤。有的錯誤是程式編寫有問題造成的,比如本來應該輸出整數結果輸出了字串,這種錯誤我們通常稱之為bug,bug是必須修復的。有的錯誤是使用者輸入造成的,比如讓使用者輸入email位址,結果得到乙個空字串,這種錯誤可以通過檢查使用者輸入來做相應的處理。還有一類錯誤是...

錯誤 除錯和測試

try except finally try print 測試開始 m 10 0 製造乙個錯誤 print 未出現錯誤 若有錯誤,跳過此局 出現錯誤跳到except語句 except zerodivisionerror as e except捕獲到zerodivisionerror然後執行 prin...

python錯誤 除錯和測試

錯誤 除錯和測試 當我們認為某些 可能會出錯時,就可以用try來執行這段 如果執行出錯,則後續 不會繼續執行,而是直接跳轉至錯誤處理 即except語句塊,執行完except後,如果有finally語句塊,則執行finally語句塊,至此,執行完畢。出錯的時候,一定要分析錯誤的呼叫棧資訊,才能定位錯...