Python常用斷言函數(shù)實(shí)例匯總
Python assert 語(yǔ)句,又稱斷言語(yǔ)句,可以看做是功能縮小版的 if 語(yǔ)句,它用于判斷某個(gè)表達(dá)式的值,如果值為真,則程序可以繼續(xù)往下執(zhí)行;反之,Python 解釋器會(huì)報(bào) AssertionError 錯(cuò)誤。
assert 語(yǔ)句的語(yǔ)法結(jié)構(gòu)為:
assert 表達(dá)式
assert 語(yǔ)句的執(zhí)行流程可以用 if 判斷語(yǔ)句表示(等效),如下所示:
if 表達(dá)式==True:
程序繼續(xù)執(zhí)行
else:
程序報(bào) AssertionError 錯(cuò)誤
有讀者可能會(huì)問,明明 assert 會(huì)令程序崩潰,為什么還要使用它呢?這是因?yàn)?,與其讓程序在晚些時(shí)候崩潰,不如在錯(cuò)誤條件出現(xiàn)時(shí),就直接讓程序崩潰,這有利于我們對(duì)程序排錯(cuò),提高程序的健壯性。
因此,assert 語(yǔ)句通常用于檢查用戶的輸入是否符合規(guī)定,還經(jīng)常用作程序初期測(cè)試和調(diào)試過程中的輔助工具。
下面的程序演示了 assert 語(yǔ)句的用法:
mathmark = int(input())
#斷言數(shù)學(xué)考試分?jǐn)?shù)是否位于正常范圍內(nèi)
assert 0 <= mathmark <= 100
#只有當(dāng) mathmark 位于 [0,100]范圍內(nèi),程序才會(huì)繼續(xù)執(zhí)行
print("數(shù)學(xué)考試分?jǐn)?shù)為:",mathmark)
運(yùn)行該程序,測(cè)試數(shù)據(jù)如下:
90
數(shù)學(xué)考試分?jǐn)?shù)為: 90
再次執(zhí)行該程序,測(cè)試數(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 語(yǔ)句后的表達(dá)式值為真時(shí),程序繼續(xù)執(zhí)行;反之,程序停止執(zhí)行,并報(bào) AssertionError 錯(cuò)誤。
常用斷言函數(shù)
常用
這里介紹幾個(gè)常用斷言的使用方法,可以一定程度上幫助大家對(duì)預(yù)期結(jié)果進(jìn)行判斷。-
- assertEqual
- assertNotEqual
- assertTrue
- assertFalse
- assertIsNone
- assertIsNotNone
- assertEqual 和 assertNotEqual
- assertEqual:如兩個(gè)值相等,則pass
- assertNotEqual:如兩個(gè)值不相等,則pass
使用方法:
assertEqual(first,second,msg)其中first與second進(jìn)行比較,如果相等則通過;msg為失敗時(shí)打印的信息,選填;斷言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)檢查某個(gè)元素是否存在
總結(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
使用時(shí)機(jī):
那么我們什么時(shí)候應(yīng)該使用斷言呢?如果沒有特別的目的,斷言應(yīng)該用于如下情況:
- 防御性的編程
- 運(yùn)行時(shí)對(duì)程序邏輯的檢測(cè)
- 合約性檢查(比如前置條件,后置條件)
- 程序中的常量
- 檢查文檔
- 例:防御性編程中添加斷言
在代碼開始添加注釋是個(gè)好的開端,但是人們都不太喜歡讀和更新這些注釋,這些注釋會(huì)很快變得過時(shí)。但對(duì)于斷言,我們可以同時(shí)對(duì)這塊代碼編寫文檔,如果這些斷言被違反了,會(huì)直接引起一個(gè)簡(jiǎn)單而又直接的失敗。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python selenium實(shí)現(xiàn)斷言3種方法解析
- Python unittest單元測(cè)試框架及斷言方法
- python異常處理、自定義異常、斷言原理與用法分析
- Python3 assert斷言實(shí)現(xiàn)原理解析
- python3 assert 斷言的使用詳解 (區(qū)別于python2)
- Python TestCase中的斷言方法介紹
- python 實(shí)現(xiàn)selenium斷言和驗(yàn)證的方法
- Python斷言assert的用法代碼解析
- Python中斷言Assertion的一些改進(jìn)方案
- 分析在Python中何種情況下需要使用斷言
相關(guān)文章
python 利用已有Ner模型進(jìn)行數(shù)據(jù)清洗合并代碼
今天小編就為大家分享一篇python 利用已有Ner模型進(jìn)行數(shù)據(jù)清洗合并代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-12-12從Python的源碼淺要剖析Python的內(nèi)存管理
這篇文章主要介紹了從Python的源碼淺要剖析Python的內(nèi)存管理,需要的朋友可以參考下2015-04-04Python海龜turtle基礎(chǔ)知識(shí)大全以及畫圖集合實(shí)例
turtle是一個(gè)簡(jiǎn)單的繪圖工具,它提供了一個(gè)海龜,你可以把它理解為一個(gè)機(jī)器人,只聽得懂有限的指令,下面這篇文章主要給大家介紹了關(guān)于Python海龜turtle基礎(chǔ)知識(shí)大全以及畫圖集合的相關(guān)資料,需要的朋友可以參考下2023-04-04python實(shí)現(xiàn)新年倒計(jì)時(shí)實(shí)例代碼
大家好,本篇文章主要講的是python實(shí)現(xiàn)新年倒計(jì)時(shí)實(shí)例代碼,昂星期的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12python隨機(jī)生成大小寫字母數(shù)字混合密碼(僅20行代碼)
這篇文章主要介紹了python隨機(jī)生成大小寫字母數(shù)字混合密碼,主要是利用random模塊隨機(jī)生成數(shù)字,大小寫字母,通過循環(huán)次數(shù)來(lái)實(shí)現(xiàn)此功能,需要的朋友可以參考下2020-02-02