Python 斷言



Python 中的斷言

Python 中的斷言是宣告,斷言或假設一個條件為真。如果該條件結果為假,Python 將引發 AssertionError 異常。它們用於檢測如果程式碼正確則永遠不會發生的程式設計錯誤。

  • 理解斷言最簡單的方法是將其比作 raise-if 語句(或更準確地說,是 raise-if-not 語句)。測試一個表示式,如果結果為假,則引發異常。

  • 斷言由 assert 語句執行,這是 Python 中最新引入的關鍵字,在 1.5 版中引入。

  • 程式設計師通常將斷言放在函式的開頭以檢查有效輸入,並在函式呼叫後檢查有效輸出。

assert 語句

在 Python 中,斷言使用 assert 關鍵字後跟一個表示式。如果表示式的計算結果為 False,則會引發 AssertionError。以下是斷言的語法:

assert condition, message

其中:

  • condition − 一個應該為真的布林表示式。

  • message (optional) − 一個可選的訊息,如果斷言失敗則顯示。

使用斷言

斷言通常用於開發和測試階段,以檢查始終為真的條件。

示例

在下面的示例中,我們使用斷言來確保變數“num”落在“0”到“100”的有效範圍內。如果斷言失敗,Python 將引發“AssertionError”,阻止後續 print 語句的執行:

print('Enter marks out of 100:')
num = 75
assert num >= 0 and num <= 100
print('Marks obtained:', num)

num = 125
assert num >= 0 and num <= 100
print('Marks obtained:', num)  # This line won't be reached if assertion fails

以上程式碼的輸出如下:

Enter marks out of 100:
Marks obtained: 75
Traceback (most recent call last):
  File "/home/cg/root/66723bd115007/main.py", line 7, in <module>
    assert num >= 0 and num <= 100
AssertionError

自定義錯誤訊息

要在斷言失敗時顯示自定義錯誤訊息,請在 assert 語句中的表示式後包含一個字串:

assert num >= 0 and num <= 100, "Only numbers in the range 0-100 are accepted"

處理 AssertionError

可以使用 try-except 塊捕獲和處理斷言,就像任何其他異常一樣。如果未處理它們,它們將終止程式併產生回溯:

try:
   num = int(input('Enter a number: '))
   assert num >= 0, "Only non-negative numbers are accepted"
   print(num)
except AssertionError as msg:
   print(msg)

這將產生以下輸出:

Enter a number: -87
Only non-negative numbers are accepted

斷言與異常

斷言用於檢查內部狀態和始終為真的不變式。而異常有助於處理執行時錯誤和在正常執行期間可能發生的異常情況。

在 Python 的最佳化模式 (-O 或 python -O script.py) 下,斷言預設情況下是停用的。因此,不應將它們用於在生產環境中程式正確執行所需的約束條件。

廣告