python之錯誤、除錯和測試
阿新 • • 發佈:2020-12-03
錯誤處理
在程式執行的過程中,如果發生了錯誤,可以事先約定返回一個錯誤程式碼,這樣,就可以知道是否有錯,以及出錯的原因。
Python內建try...except...finally...
的錯誤處理機制
# try: # print('try...') # r=10/0 #運算式 # print('result',r)#判斷運算式是否正確,正確輸出運算式結果 # except ZeroDivisionError as e:#運算式錯誤,報錯 # print('except',e) # finally:#結束try # print('finally...')# print('END')
除錯
程式能一次寫完並正常執行的概率很小,基本不超過1%。總會有各種各樣的bug需要修正。有的bug很簡單,看看錯誤資訊就知道,有的bug很複雜,我們需要知道出錯時,哪些變數的值是正確的,哪些變數的值是錯誤的,因此,需要一整套除錯程式的手段來修復bug。
第一種方法用print()
把變數打印出來看看
第二種方法是斷言,凡是用print()
來輔助檢視的地方,都可以用斷言(assert)來替代,如果斷言失敗,assert
語句本身就會丟擲AssertionError。
# def foo(s): # n = int(s) # assert n != 0, 'n is zero!'#如果n!=0為True執行return,為False執行報錯資訊‘n is zero!’# return 10 / n # foo(5)
第三種方法是把print()
替換為logging。
logging
不會丟擲錯誤,而且可以輸出到檔案。
# import logging # logging.basicConfig(level=logging.INFO) # s = '0' # n = int(s) # logging.info('n = %d' % n) # print(10 / n)
第四種方法是啟動Python的偵錯程式pdb,讓程式以單步方式執行,可以隨時檢視執行狀態
單元測試
單元測試是用來對一個模組、一個函式或者一個類來進行正確性檢驗的測試工作
編寫單元測試時,我們需要編寫一個測試類,從unittest.TestCase
以test
開頭的方法就是測試方法,不以test
開頭的方法不被認為是測試方法,測試的時候不會被執行。
文件測試
Python內建的“文件測試”(doctest)模組可以直接提取註釋中的程式碼並執行測試。
doctest嚴格按照Python互動式命令列的輸入和輸出來判斷測試結果是否正確。只有測試異常的時候,可以用...
表示中間一大段煩人的輸出。