在 Python 中使用斷言

神龍ip發表於2022-01-27

  在 Python 中,除了使用 try 語句來處理程式執行中出現的異常,其實我們還可以使用斷言(Assertions)來處理異常。

  斷言使用 assert 關鍵字,它的語法格式為:

assert Expression[, Arguments]

  當它遇到一個斷言語句,Python 直譯器評估計算之後的表示式,希望是 True 值。如果表示式為 False,就會觸發 AssertionError 異常。異常引數(Arguments)其實就是在斷言表示式後新增字串資訊,用來解釋斷言並更好的知道是哪裡出了問題。

  理解斷言的最簡單的方法就是把它比作 raise-if 語句(更確切來說是 raise-if-not)。即對一個表示式進行測試,如果結果為 False,則觸發異常。也就是說,assert expression 語句等價於:

if not expression:
    raise AssertionError

  如果斷言失敗,Python 使用 Arguments 作為 AssertionError 異常的引數。同樣可以用 try-except 語句來捕獲並處理 AssertionError 異常,但是如果沒有處理 AssertionError,Python 將終止該程式併產生一個回溯。

  assert 判斷的是表示式,如果需要同時判斷多個表示式,可以這樣:

assert (expression1 and expression2), "prompt..."

  除錯模式

  實際上,斷言是一種理智檢查,通常用於開發階段,在需要確保某個條件一定為真才能讓程式正常工作的情況就很適合使用斷言。比如,程式設計師常常放置斷言來檢查輸入的有效,或在一個函式呼叫後檢查有效的輸出。當程式的測試完成,可以選擇將斷言開啟或關閉。

  關閉斷言的方法是在執行 Python 程式的時候加上 -O 引數,如下:

python -O 原始檔

  assert 語句不應用於必須執行以確保程式正確的程式碼,因為如果 Python 執行在最優模式中(通過對直譯器使用 -O 選項進入該模式),assert 語句將會被忽略。特別是不能用 assert 語句檢查使用者輸入,相反,assert 語句用於檢查應該始終為真的內容。如果 assert 引發異常,這意味著程式中存在 bug,而不是使用者出現了錯誤。因此,對於諸如檢查輸入是否有效的操作,應該使用傳統的 if 語句和相應的錯誤處理程式碼替換 assert 語句。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011087/viewspace-2854312/,如需轉載,請註明出處,否則將追究法律責任。

相關文章