首頁 > 人文

Python 拓展之斷言(assert)

由 Python空間 發表于 人文2023-01-07

簡介cnt -= amountelse:print(‘cnt is not enough’)在上面的程式碼中,我們設定的是 deposit() 和 withdraw() 方法的引數 amount 必須大於零,這裡用的就是斷言,如果不滿足條件的話

什麼是斷言,斷言有什麼作用?

Python 拓展之斷言(assert)

本文字數:1267 字

閱讀本文大概需要:4 分鐘

寫在之前

在昨天的文章中(零基礎學習 Python 之處理異常)中學習了處理異常的正確姿勢,今天我們繼續來學習“錯誤 & 異常”裡比較重要的一個知識點:「assert」。

assert 翻譯成中文就是「斷言」的意思,它是一句等價於布林真的判斷,如果它發生異常的話,意味著表示式為假。

斷言(assert)

首先讓我們先來看點簡單的程式碼,從程式碼中理解 assert。

>>> assert ‘a’ == ‘a’

>>> assert ‘a’ == ‘b’

Traceback (most recent call last):

File “”, line 1, in

Assertion​Error

assert 的應用場景很像它在漢語中的意思:當程式執行到某個節點的時候,就斷定某個變數的值必然是什麼,或者是物件必然擁有某個屬性等。簡單點來說的話,就是斷定是什麼東西就必然是什麼東西,如果不是,就丟擲異常。

接下來我們再來看一段稍微複雜點的程式碼:

classAccount(object):

def__init__(self,num):

self。number = num

self。cnt = 0

defdeposit(self,amount):

try:

assert amount > 0

self。cnt += amount

except:

print(‘the amount can not be zero。’)

defwithdraw(self,amount):

assert amount > 0

if amount <= self。cnt:

self。cnt -= amount

else:

print(‘cnt is not enough’)

在上面的程式碼中,我們設定的是 deposit() 和 withdraw() 方法的引數 amount 必須大於零,這裡用的就是斷言,如果不滿足條件的話就會直接報錯。比如像下面這樣來執行:

if __name__ == “__main__”:

a = Account(100)

a。deposit(-10)

出現的結果如下所示:

the amount can not be zero。

這就是斷言 assert 的引用,那麼什麼時候是引用斷言的最佳時機呢?如果沒有特殊的目的的話,斷言主要應用於以下情況(參考《Python使用斷言的最佳時機》):

1。防禦性的程式設計;

2。執行時對程式邏輯的檢測;

3。合約性檢查(比如前置或者後置條件);

4。程式中的常量;

5。檢查文件。

寫在之後

assert 就這些東西,「錯誤 & 異常」到這差不多就結束了。異常處理是程式語言或者計算機硬體裡的一種機制,用於處理軟體或資訊系統中出現的異常狀況。

透過異常處理,我們可以對使用者在程式中的非法輸入進行控制和提示,以防程式崩潰。從程序的視角來看,硬體終端屬於可恢復異常,雖然異常一般與程式流本身無關。

異常是一種很有用的機制,用於通知外界該子程式不能正常執行,比如輸入的資料無效或者所需的資源不可用等,如果系統沒有異常機制,則程式設計師需要用返回值來標示發生了哪些錯誤。

最後,如果你覺得本篇文章對你有所幫助的話,歡迎點贊轉發,先行謝過。

The end。

Tags:assertamount異常__self