1. 程式人生 > 實用技巧 >python之錯誤、除錯和測試

python之錯誤、除錯和測試

錯誤處理

在程式執行的過程中,如果發生了錯誤,可以事先約定返回一個錯誤程式碼,這樣,就可以知道是否有錯,以及出錯的原因。

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互動式命令列的輸入和輸出來判斷測試結果是否正確。只有測試異常的時候,可以用...表示中間一大段煩人的輸出。