python中的斷言


python中的斷言是一種調試工具,用來測試某一個斷言條件。如果斷言條件為真,則程序將繼續正常執行,但是如果條件為假,那么就會引發AssertionError異常並且顯示相關的錯誤信息。

使用斷言來自動檢測程序中的錯誤,讓程序更可靠以及更易於調試。

斷言舉例

下面假設要用python構建在線商店,為了添加打折優惠券的功能,編寫了下面這個apply_discount函數:

里面中的assert語句就是確保在任何情況下,通過該函數計算的折后價不低於0,也不會高於產品原價。

1 def apply_discount(product, discount):
2     price = int(product['price'] * (1.0 - discount))
3     assert 0 <= price <= product['price']
4     return price
shoes = {'name': 'Fancy Shoes', 'price': 14900}

price = apply_discount(shoes, 0.25)
print(price)

11175

上面的例子正常運行,可以計算出打折后的價格,如果discount=2時,會出現什么結果呢?

shoes = {'name': 'Fancy Shoes', 'price': 14900}

price = apply_discount(shoes, 2)
print(price)

輸出結果如下:

1 Traceback (most recent call last):
2   File "C:/Desktop/test/main.py", line 9, in <module>
3     price = apply_discount(shoes, 2)
4   File "C:/Desktop/test/main.py", line 3, in apply_discount
5     assert 0 <= price <= product['price']
6 AssertionError

可以看到觸發了AssertionError.因為此時違反了函數中設置的斷言條件

斷言可以極大的加快調試工作的速度,並且從長遠看來,程序也更加容易維護。

 

Python的斷言語法

python的斷言語法如下:

1 assert_stmt ::= "assert" expression1 ["," expression2]

其中,expression1是需要測試的條件,可選的expression2是錯誤消息,如果斷言失敗那么就顯示該消息。在執行的時候,python解釋器將每條斷言語句大致轉換成以下這些語句:

1 if __debug__:
2     if not expression1:
3         raise AssertionError(expression2)

這段代碼有下面兩個特征:

  • 代碼在檢查斷言條件之前,還會檢查__debug__全局變量。這是一個內置的布爾標記,在一般情況下為真,若進行代碼優化則為假。
  • 還可以用expression2傳遞一個可選的錯誤消息,該消息將與回溯中的AssertionError一起顯示,用來進一步簡化調試。

 

斷言總結:

Python斷言語句是一種測試某個條件的調試輔助功能,可以作為程序的內部自檢。

斷言應該只用於幫助開發人員識別bug,不是用於處理運行時錯誤的機制。

設置解釋器可以全局禁用斷言。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM