3.4.5 斷言

斷言(assertions)的使用方式類似于if語句,只是在不滿足條件時,會直接拋出異常。類似于下面的if語句(偽代碼)

            
              if not condition:       #如果不滿足條件,會直接拋出異常,程序會中斷
    crash program
            
          

那么究竟為什么需要這樣的代碼呢?主要原因為需要檢測程序在某個地方是否滿足條件,如果不滿足條件,應該及時通知開發人員,而不是將這些bug隱藏起來,知道關鍵的時候在崩潰。

其實在TDD中經常使用斷言,TDD會在程序發現異常時執行斷言,并拋出異常。

在Python語言中,斷言需要使用assert語句,在assert關鍵字的后面指定斷言的條件表達式。如果條件表達式的值是False,那么就會拋出異常。而且斷言后面的語句都不會執行,相當于程序的一個斷點。

            
              >>> value = 20
>>> assert value < 10 or value > 30     #條件不滿足,會拋出異常
>> assert value < 30        #條件滿足,會正常執行后面的語句
            
          

可以看到,value變量的值是20,而assert后面的條件是“value < 10 or value > 30”,很明顯,條件不滿足,所以在斷言出會拋出異常。而后面的斷言,條件是“value < 30”,這個條件是滿足的,所以在斷言后面的語句都會正常執行。

當斷言條件不滿足時拋出異常,在默認情況下,只顯示了拋出異常的位置,并沒有顯示拋出異常的原因,所以為了異常信息更明確,可以為assert語句指定異常描述。

            
              >>> value = 20
>>> assert value < 10 or value > 30,'value值必須在10~20'    #為斷言指定異常描述信息
            
          

[例 3.6] 本例演示了斷言的用法。

            
              name = "Bill"       #定義變量name
assert name == "Bill"       #斷言條件表達式的值是True,繼續執行下面的語句

age = 20        #定義變量age
#斷言條件表達式的值是False,拋出異常,后面的代碼不會被執行
assert 0 < age < 10, '年齡必須小于10歲'

print("hello world")        #這行代碼不會被執行