#price 為原價,discount 為折扣力度 def apply_discount(price, discount): updated_price = price * (1 - discount) assert 0 <= updated_price <= price, '折扣價應在 0 和原價之間' return updated_price可以看到,在計算新價格的後面,新增了一個 assert 語句,用來檢查折後價格,這裡要求新折扣價格必須大於等於 0、小於等於原來的價格,否則就丟擲異常。
print(apply_discount(100,0.2)) print(apply_discount(100,1.1))執行結果為:
80.0
Traceback (most recent call last):
File "C:UsersmengmaDesktopdemo.py", line 7, in <module>
print(apply_discount(100,1.1))
File "C:UsersmengmaDesktopdemo.py", line 4, in apply_discount
assert 0 <= updated_price <= price, '折扣價應在 0 和原價之間'
AssertionError: 折扣價應在 0 和原價之間
def func(input): assert isinstance(input, list), '輸入內容必須是列表' # 下面的操作都是基於前提:input 必須是 list if len(input) == 1: ... elif len(input) == 2: ... else: ...上面程式碼中,func() 函數中的所有操作都基於輸入必須是列表這個前提。所以很有必要在開頭加一句 assert 的檢查,防止程式出錯。
def login_user_identity(user_id): #憑藉使用者 id 判斷該使用者是否為 VIP 使用者 assert user_is_Vip(user_id) "使用者必須是VIP使用者,才能閱讀VIP文章" read()此程式碼從程式碼功能角度上看,並沒有問題,但在實際場景中,基本上沒人會這麼寫,因為一旦 assert 失效,則就造成任何使用者都可以閱讀 VIP 文章,這顯然是不合理的。
def login_user_identity(user_id): #憑藉使用者 id 判斷該使用者是否為 VIP 使用者 if not user_is_Vip(user_id): raise Exception("使用者必須是VIP使用者,才能閱讀VIP文章") read()總之,不能濫用 assert,很多情況下,程式中出現的不同情況都是意料之中的,需要用不同的方案去處理,有時用條件語句進行判斷更為合適,而對於程式中可能出現的一些異常,要記得用 try except 語句處理(後續章節會做詳細介紹)。