python錯誤處理/調試/單元測試/文檔測試
阿新 • • 發佈:2019-01-08
highlight execption 語句 unittest filename raise 不能 key nbsp
一.錯誤處理
1.錯誤處理
try: ... except Exception1: ... except Exception2: ... finally: ...
如果在try中發生錯誤,那麽except將捕獲到指定錯誤,然後執行該段語句;而無論有無錯誤finally都會執行.
2.示例代碼:
#-*-coding=utf-8-*- a = 0 try: 10 / a except BaseException: print(‘a is 0‘) finally: print(‘done‘)
所有異常的異常都繼承自BaseExecption,所以可以指定BaseExecption來捕獲所有異常
3.拋出錯誤
raise為編程者手動拋出錯誤
格式:
raise 錯誤類型(錯誤信息)
註意,raise語句如果不帶參數,就會把當前錯誤原樣拋出或拋出No active exception to reraise
#-*-coding=utf-8-*- a = 0 try: if a == 0: raise ValueError(‘a is 0‘) 10 / a except Exception as e: print(e) finally: print(‘done‘)
二.調試
1.print函數
2.斷言:
assert a != 0, ‘a is 0‘
如果a不等於0,符合預期,否則輸出a is 0
可以使用 -O來關閉assert輸出:
python -O file.py
3.日誌記錄:
示例:
import logging logging.basicConfig(filename=‘log.log‘, level=logging.INFO) logging.info(‘發生錯誤‘)
三.單元測試
1.引入python的unittest模塊
2.編寫測試類,從unittest.TestCase繼承
3.重要的兩種方法:
self.assertEqual(abs(-1), 1) # 斷言函數返回的結果與1相等
#斷言是否會引發指定類型的錯誤 with self.assertRaises(KeyError): value = d[‘empty‘]
4.setUp()在每調用一個方法前被執行
5.tearDown()在每調用一個方法後被執行
6.運行單元測試
if __name__ == ‘__main__‘: unittest.main()
另一種方法是在命令行通過參數-m unittest直接運行單元測試,這樣可以一次運行多個單元測試
7.示例代碼:
import unittest def say_hello(): return ‘hello‘ def division(a): if a == 0: raise ValueError(‘a不能為0‘) return 100/a class Test(unittest.TestCase): def setUp(self): print(‘測試開始了‘) def test_say_hello(self): self.assertEqual(say_hello(), ‘hello‘) def test_division(self): with self.assertRaises(ZeroDivisionError): division(0) def tearDown(self): print(‘測試結束了‘) if __name__ == ‘__main__‘: unittest.main()
四.文檔測試
文檔註釋中寫入交互命令,即可作為文檔測試
class OK: """ this is test ok Example: >>> ok = OK() >>> ok.my(1,2) 30 >>> ok.my(2,-1) Traceback (most recent call last): ... Param is error: -1 """ def my(self, a, b): return a + b if __name__ == ‘__main__‘: import doctest doctest.testmod()
python錯誤處理/調試/單元測試/文檔測試