0.Python的assert是用來檢查一個條件,如果它爲真,就不做任何事。如果它爲假,則會拋出AssertError並且包含錯誤信息。assert語句是一種插入調試斷點到程序的一種便捷的方式。
1.使用斷言可以創建更穩定,品質更好且不易於出錯的代碼。當需要在一個值爲FALSE時中斷當前操作的話,可以使用斷言。單元測試必須使用斷言(Junit/JunitX)。
2.斷言可以有兩種形式
1.assert Expression12.assert Expression1:Expression2
其中Expression1應該總是一個布爾值,Expression2是斷言失敗時輸出的失敗消息的字符串。
如果Expression1爲假,則拋出一個 AssertionError,這是一個錯誤,而不是一個異常,也就是說是一個不可控制異常(unchecked Exception),AssertionError由於是錯誤,所以可以不捕獲,但不推薦這樣做,因爲那樣會使你的系統進入不穩定狀態。
3.測試程序:
>>> mylist = ['item']>>> assert len(mylist) >= 1
>>> mylist.pop()
'item'
>>> assert len(mylist) >= 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
4.那什麼時候應該使用assert?
1)防禦型的編程
2)運行時檢查程序邏輯
3)檢查約定
4)程序常量
5)檢查文檔
6.下面是建議不要用斷言的場景:
1)不要用它測試用戶提供的數據
2)不要用斷言來檢查你覺得在你的程序的常規使用時會出錯的地方。斷言是用來檢查非常罕見的問題。你的用戶不應該看到任何斷言錯誤,如果他們看到了,這是一個bug,修復它。
3)有的情況下,不用斷言是因爲它比精確的檢查要短,它不應該是懶碼農的偷懶方式。
4)不要用它來檢查對公共庫的輸入參數,因爲它不能控制調用者,所以不能保證調用者會不會打破雙方的約定。
5)不要爲你覺得可以恢復的錯誤用斷言。換句話說,不用改在產品代碼裏捕捉到斷言錯誤。
6)不要用太多斷言以至於讓代碼很晦澀。