Python常用斷言函數(shù)實(shí)例匯總
Python assert 語句,又稱斷言語句,可以看做是功能縮小版的 if 語句,它用于判斷某個表達(dá)式的值,如果值為真,則程序可以繼續(xù)往下執(zhí)行;反之,Python 解釋器會報 AssertionError 錯誤。
assert 語句的語法結(jié)構(gòu)為:
assert 表達(dá)式
assert 語句的執(zhí)行流程可以用 if 判斷語句表示(等效),如下所示:
if 表達(dá)式==True:
程序繼續(xù)執(zhí)行
else:
程序報 AssertionError 錯誤
有讀者可能會問,明明 assert 會令程序崩潰,為什么還要使用它呢?這是因?yàn)?,與其讓程序在晚些時候崩潰,不如在錯誤條件出現(xiàn)時,就直接讓程序崩潰,這有利于我們對程序排錯,提高程序的健壯性。
因此,assert 語句通常用于檢查用戶的輸入是否符合規(guī)定,還經(jīng)常用作程序初期測試和調(diào)試過程中的輔助工具。
下面的程序演示了 assert 語句的用法:
mathmark = int(input())
#斷言數(shù)學(xué)考試分?jǐn)?shù)是否位于正常范圍內(nèi)
assert 0 <= mathmark <= 100
#只有當(dāng) mathmark 位于 [0,100]范圍內(nèi),程序才會繼續(xù)執(zhí)行
print("數(shù)學(xué)考試分?jǐn)?shù)為:",mathmark)
運(yùn)行該程序,測試數(shù)據(jù)如下:
90
數(shù)學(xué)考試分?jǐn)?shù)為: 90
再次執(zhí)行該程序,測試數(shù)據(jù)為:
159
Traceback (most recent call last):
File "C:\Users\mengma\Desktop\file.py", line 3, in <module>
assert 0 <= mathmark <= 100
AssertionError
可以看到,當(dāng) assert 語句后的表達(dá)式值為真時,程序繼續(xù)執(zhí)行;反之,程序停止執(zhí)行,并報 AssertionError 錯誤。
常用斷言函數(shù)
常用
這里介紹幾個常用斷言的使用方法,可以一定程度上幫助大家對預(yù)期結(jié)果進(jìn)行判斷。-
- assertEqual
- assertNotEqual
- assertTrue
- assertFalse
- assertIsNone
- assertIsNotNone
- assertEqual 和 assertNotEqual
- assertEqual:如兩個值相等,則pass
- assertNotEqual:如兩個值不相等,則pass
使用方法:
assertEqual(first,second,msg)其中first與second進(jìn)行比較,如果相等則通過;msg為失敗時打印的信息,選填;斷言assertNotEqual反著用就可以了。
- assertTrue和assertFalse
- assertTrue:判斷bool值為True,則pass
- assertFalse:判斷bool值為False,則Pass
使用方法:
- assertTrue(expr,msg)其中express輸入相應(yīng)表達(dá)式,如果表達(dá)式為真,則pass;msg選填;斷言assertFalse如果表達(dá)式為假,則pass
- assertIsNone和assertIsNotNone
- assertIsNone:不存在,則pass
- assertIsNotNone:存在,則pass
使用方法:
assertIsNone(obj,msg)檢查某個元素是否存在
總結(jié):
常用
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b 2.7
assertIsNot(a, b) a is not b 2.7
assertIsNone(x) x is None 2.7
assertIsNotNone(x) x is not None 2.7
assertIn(a, b) a in b 2.7
assertNotIn(a, b) a not in b 2.7
assertIsInstance(a, b) isinstance(a, b) 2.7
assertNotIsInstance(a, b) not isinstance(a, b) 2.7
其它
assertAlmostEqual(a, b) round(a-b, 7) == 0
assertNotAlmostEqual(a, b) round(a-b, 7) != 0
assertGreater(a, b) a > b 2.7
assertGreaterEqual(a, b) a >= b 2.7
assertLess(a, b) a < b 2.7
assertLessEqual(a, b) a <= b 2.7
assertRegexpMatches(s, re) regex.search(s) 2.7
assertNotRegexpMatches(s, re) not regex.search(s) 2.7
assertItemsEqual(a, b) sorted(a) == sorted(b) and works with unhashable objs 2.7
assertDictContainsSubset(a, b) all the key/value pairs in a exist in b 2.7
assertMultiLineEqual(a, b) strings 2.7
assertSequenceEqual(a, b) sequences 2.7
assertListEqual(a, b) lists 2.7
assertTupleEqual(a, b) tuples 2.7
assertSetEqual(a, b) sets or frozensets 2.7
assertDictEqual(a, b) dicts 2.7
assertMultiLineEqual(a, b) strings 2.7
assertSequenceEqual(a, b) sequences 2.7
assertListEqual(a, b) lists 2.7
assertTupleEqual(a, b) tuples 2.7
assertSetEqual(a, b) sets or frozensets 2.7assertDictEqual(a, b) dicts 2.7
使用時機(jī):
那么我們什么時候應(yīng)該使用斷言呢?如果沒有特別的目的,斷言應(yīng)該用于如下情況:
- 防御性的編程
- 運(yùn)行時對程序邏輯的檢測
- 合約性檢查(比如前置條件,后置條件)
- 程序中的常量
- 檢查文檔
- 例:防御性編程中添加斷言
在代碼開始添加注釋是個好的開端,但是人們都不太喜歡讀和更新這些注釋,這些注釋會很快變得過時。但對于斷言,我們可以同時對這塊代碼編寫文檔,如果這些斷言被違反了,會直接引起一個簡單而又直接的失敗。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
用?Python?腳本實(shí)現(xiàn)電腦喚醒后自動拍照并截屏發(fā)郵件通知
這篇文章主要介紹了用?Python?腳本實(shí)現(xiàn)電腦喚醒后自動拍照并截屏發(fā)郵件通知,文中詳細(xì)的介紹了代碼示例,具有一定的 參考價值,感興趣的可以了解一下2023-03-03
利用Python+PyQt5實(shí)現(xiàn)簡易瀏覽器的實(shí)戰(zhàn)記錄
這篇文章主要給大家介紹了關(guān)于如何利用Python+PyQt5實(shí)現(xiàn)簡易瀏覽器的相關(guān)資料,Qt 的主要優(yōu)勢是可以開發(fā)跨平臺的圖形界面程序,基于 Qt 的應(yīng)用能夠借助于各平臺的原生性在不同類的設(shè)備上運(yùn)行,而無須修改任何代碼庫,需要的朋友可以參考下2021-07-07
Python 輸入一個數(shù)字判斷成績分?jǐn)?shù)等級的方法
今天小編就為大家分享一篇Python 輸入一個數(shù)字判斷成績分?jǐn)?shù)等級的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11
Python中cv2.Canny() 函數(shù)使用方法
cv2.Canny() 函數(shù)是 OpenCV 中的邊緣檢測函數(shù)之一,用于檢測圖像的邊緣,它的基本原理是通過計算圖像中每個像素點(diǎn)的梯度值來檢測邊緣,本文通過示例代碼介紹Python中cv2.Canny() 函數(shù)用法,需要的朋友參考下吧2023-07-07
詳解NumPy中的線性關(guān)系與數(shù)據(jù)修剪壓縮
本文將通過股票均線計算的案例來為大家講解一下NumPy中的線性關(guān)系以及數(shù)據(jù)修剪壓縮的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-05-05

