国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[Python] 斷言assert與單元測試

這篇具有很好參考價(jià)值的文章主要介紹了[Python] 斷言assert與單元測試。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、概念(What)

在Python中,斷言(assertion)是一種用于檢查程序中的條件是否為真的工具。它用于在程序的特定點(diǎn)處驗(yàn)證一些假設(shè),并在條件為假時(shí)觸發(fā)異常如果斷言為真,則程序繼續(xù)執(zhí)行;如果斷言為假,則引發(fā)AssertionError異常。

assert語句的語法如下:

assert condition, message

其中,condition是一個(gè)布爾表達(dá)式,如果為真則斷言通過;如果為假,則引發(fā)異常。"error message"是可選的錯(cuò)誤消息字符串,當(dāng)斷言失敗時(shí)用于解釋為什么斷言失敗。

在Python源碼中,assert語句的實(shí)現(xiàn)主要涉及以下幾個(gè)步驟:

  1. 編譯階段:當(dāng)Python解釋器遇到assert語句時(shí),它會將其編譯成字節(jié)碼。在字節(jié)碼中,assert語句通常會被編碼為一個(gè)特殊的操作碼,例如POP_JUMP_IF_FALSE或POP_JUMP_IF_TRUE。
  2. 運(yùn)行時(shí)檢查:在執(zhí)行字節(jié)碼時(shí),解釋器會檢查斷言的條件表達(dá)式。如果條件為真,則繼續(xù)執(zhí)行后續(xù)的字節(jié)碼;如果條件為假,則跳轉(zhuǎn)到相應(yīng)的異常處理代碼。
  3. 引發(fā)異常:如果斷言失?。礂l件為假),解釋器將跳轉(zhuǎn)到預(yù)定義的異常處理代碼。在那里,將使用給定的錯(cuò)誤消息(如果有)構(gòu)建一個(gè)AssertionError異常對象,并將其拋出。
  4. 異常處理:如果程序中沒有捕獲該異常,解釋器將終止程序執(zhí)行并打印錯(cuò)誤消息。否則,異常將被傳遞給上層調(diào)用者或處理程序。

二、實(shí)踐(How)

關(guān)于assert的關(guān)鍵字的使用,可以參照以下示例:

"""
Python中斷言的使用與單元測試
"""
assert 1 < 0

該代碼輸出的結(jié)果為:

Traceback (most recent call last):
  File "/Users/PycharmProjects/python/coding/code.py", line 4, in <module>
    assert 1 < 0
AssertionError

據(jù)上可知,當(dāng)assert后的布爾表達(dá)式結(jié)果為假后,拋出AssertionError異常,該異??梢员?mark>try…except捕獲;

顯示自定義錯(cuò)誤消息,只需在assert語句中的表達(dá)式后面放置一個(gè)字符串;

"""
Python中斷言的使用與單元測試
"""
assert 1 < 0, 'oh, im error~'

輸出如下:

Traceback (most recent call last):
  File "/Users/PycharmProjects/python/coding/code.py", line 4, in <module>
    assert 1 < 0, 'oh, im error~'
AssertionError: oh, im error~

三、思考(Why)

既然斷言如此有用,那為什么沒有在大部分代碼中看見它的使用呢?

斷言軟件開發(fā)中沒有被大量使用的原因主要有以下幾點(diǎn)

  • 運(yùn)行時(shí)開銷:使用斷言需要對程序進(jìn)行大量的檢查,這可能會增加程序的運(yùn)行時(shí)開銷。對于一些性能敏感的場景,開發(fā)人員可能更傾向于避免使用斷言。
  • 破壞程序流程:斷言失敗會導(dǎo)致程序拋出異常并停止執(zhí)行。在某些情況下,這可能會中斷程序的正常流程,導(dǎo)致一些難以預(yù)料的問題。
  • 測試和調(diào)試:雖然斷言在調(diào)試和測試階段非常有用,但在開發(fā)和測試階段過去之后,許多開發(fā)人員可能就不再需要它們了。他們可能會更傾向于使用單元測試和集成測試來確保代碼的正確性。
  • 不夠直觀:斷言主要用于調(diào)試和測試,它們不能直接反映程序的主要邏輯。因此,在主代碼庫中大量使用斷言可能會讓代碼看起來不夠直觀和整潔。
  • 文化和習(xí)慣:不同的開發(fā)團(tuán)隊(duì)可能有不同的編程風(fēng)格和習(xí)慣。有些團(tuán)隊(duì)可能更傾向于使用斷言進(jìn)行錯(cuò)誤檢查,而其他團(tuán)隊(duì)可能更喜歡使用其他錯(cuò)誤處理方法。
  • 靜態(tài)類型語言不常用:斷言在一些動態(tài)類型語言(如Python)中更為常見,而在靜態(tài)類型語言(如Java、C++)中可能使用較少。這是因?yàn)殪o態(tài)類型語言通常具有更強(qiáng)大的類型系統(tǒng)和編譯器,可以提供更多的錯(cuò)誤檢查和警告。
  • 缺少工具支持:雖然斷言在一些集成開發(fā)環(huán)境(IDE)和構(gòu)建工具中得到了支持,但并不是所有的工具都提供了對斷言的完全支持。這可能導(dǎo)致一些開發(fā)人員認(rèn)為斷言不重要或不方便使用。

那我們在哪些場景下使用斷言呢?

  • 測試和調(diào)試:assert語句通常用于測試和調(diào)試階段,用于驗(yàn)證程序的某些假設(shè)是否成立。如果假設(shè)不成立,assert語句會拋出一個(gè)異常并停止程序的執(zhí)行,從而幫助開發(fā)人員快速定位和修復(fù)問題。
  • 錯(cuò)誤處理:在某些情況下,開發(fā)人員可以使用assert語句來處理程序中的錯(cuò)誤情況。例如,如果程序中的某個(gè)條件不滿足,則可以通過assert語句拋出一個(gè)異常來終止程序的執(zhí)行。
  • 條件檢查:assert語句可以用于在程序運(yùn)行過程中檢查某些條件是否滿足。如果條件不滿足,則程序?qū)伋鲆粋€(gè)異常并停止執(zhí)行。這樣可以確保程序的正確性。
  • 數(shù)據(jù)驗(yàn)證:在處理輸入數(shù)據(jù)時(shí),可以使用assert語句來驗(yàn)證數(shù)據(jù)是否符合預(yù)期的格式或條件。如果數(shù)據(jù)不符合要求,則可以拋出異常并終止程序的執(zhí)行。
  • 代碼優(yōu)化:在某些情況下,開發(fā)人員可以使用assert語句來幫助優(yōu)化代碼的性能。例如,如果開發(fā)人員知道某個(gè)條件在大多數(shù)情況下都不成立,則可以使用assert語句來檢查該條件。如果該條件成立,則程序?qū)伋鲆粋€(gè)異常并停止執(zhí)行,從而避免執(zhí)行不必要的代碼。

特別注意?。?!

assert語句主要用于開發(fā)和測試階段,而不是用于生產(chǎn)環(huán)境。在生產(chǎn)環(huán)境中使用assert語句可能會導(dǎo)致程序意外終止,因此通常建議在發(fā)布之前禁用assert語句文章來源地址http://www.zghlxwxcb.cn/news/detail-783967.html

到了這里,關(guān)于[Python] 斷言assert與單元測試的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python斷言(assert)

    Python實(shí)用教程_spiritx的博客-CSDN博客 Python assert(斷言)用于判斷一個(gè)表達(dá)式,在表達(dá)式條件為 false 的時(shí)候觸發(fā)異常。 斷言可以在條件不滿足程序運(yùn)行的情況下直接返回錯(cuò)誤,而不必等待程序運(yùn)行后出現(xiàn)崩潰的情況,例如我們的代碼只能在 Linux 系統(tǒng)下運(yùn)行,可以先判斷當(dāng)前系

    2024年02月09日
    瀏覽(17)
  • Python-assert(斷言)的用法

    時(shí)機(jī) 防御性的編程 運(yùn)行時(shí)對程序邏輯的檢測 合約性檢查(比如前置條件,后置條件) 程序中的常量 檢查文檔 目的 與其讓程序在晚些時(shí)候崩潰,不如在錯(cuò)誤條件出現(xiàn)時(shí),就直接讓程序崩潰,這有利于我們對程序排錯(cuò),提高程序的健壯性。assert 語句通常用于檢查用戶的輸入

    2024年03月22日
    瀏覽(21)
  • java單元測試( Hamcrest 斷言)

    java單元測試( Hamcrest 斷言)

    單元測試特征: 1 范圍狹窄 2 限于單一類或方法 3 體積小 為什么要編寫單元測試? 為了防止錯(cuò)誤(很明顯?。?而且還可以提高開發(fā)人員的生產(chǎn)力,因?yàn)閱卧獪y試: (1) 幫助實(shí)施——在編碼的同時(shí)編寫測試可以快速反饋正在編寫的代碼。 (2) 失敗時(shí)應(yīng)該易于理解——每個(gè)測試在

    2024年02月06日
    瀏覽(27)
  • JUnit 5單元測試(二)—— 斷言

    JUnit 5單元測試(二)—— 斷言

    上一篇講了 JUnit 5單元測試(一)—— 基本配置,書接上文開始 JUnit 5單元測試(二)—— 斷言 1.單元測試的類名應(yīng)該起為 xxxxTest.java 表明這個(gè)一個(gè)測試類,類名應(yīng)該用簡潔的英文表明測試內(nèi)容或函數(shù)。 例如:為了測試一個(gè)計(jì)算和的方法,可以取名為 SumTest.java 2.測試方法上

    2024年01月16日
    瀏覽(16)
  • 精進(jìn)單元測試技能——Pytest斷言的藝術(shù)

    精進(jìn)單元測試技能——Pytest斷言的藝術(shù)

    本篇文章主要是闡述Pytest在斷言方面的應(yīng)用。讓大家能夠了解和掌握Pytest針對斷言設(shè)計(jì)了多種功能以適應(yīng)在不同測試場景上使用。 了解斷言的基礎(chǔ) 在Pytest中,斷言是通過? assert ?語句來實(shí)現(xiàn)的。簡單的斷言通常用于驗(yàn)證預(yù)期值和實(shí)際值是否相等,例如: 然而除此之外,Pyt

    2024年01月20日
    瀏覽(32)
  • 精進(jìn)單元測試技能 —— Pytest斷言的藝術(shù)!

    精進(jìn)單元測試技能 —— Pytest斷言的藝術(shù)!

    本篇文章主要是闡述Pytest在斷言方面的應(yīng)用。讓大家能夠了解和掌握Pytest針對斷言設(shè)計(jì)了多種功能以適應(yīng)在不同測試場景上使用。 了解斷言的基礎(chǔ) 在Pytest中,斷言是通過? assert ?語句來實(shí)現(xiàn)的。簡單的斷言通常用于驗(yàn)證預(yù)期值和實(shí)際值是否相等,例如: 然而除此之外,Pyt

    2024年02月03日
    瀏覽(14)
  • 白盒測試(單元測試使用assertThat中equalTo斷言)

    白盒測試(單元測試使用assertThat中equalTo斷言)

    題目1 :根據(jù)下列流程圖編寫程序?qū)崿F(xiàn)相應(yīng)分析處理并顯示結(jié)果。返回結(jié)果“a=x:”(x為2、3或4);其中變量x、y均須為整型。編寫程序代碼,使用JUnit框架編寫測試類對編寫的程序代碼進(jìn)行測試,測試類中設(shè)計(jì)最少的測試數(shù)據(jù)滿足語句覆蓋測試,每條測試數(shù)據(jù)需要在測試類中

    2024年02月13日
    瀏覽(30)
  • C++中的斷言機(jī)制與gtest單元測試

    C++中的斷言機(jī)制與gtest單元測試

    ?? 這部分內(nèi)容網(wǎng)上已經(jīng)有很多人講了,我就不做重復(fù)性工作,制造垃圾了,大家看看下面兩個(gè)鏈接就可以了,因?yàn)槲业膶诔朔窒碜约簩W(xué)習(xí)的知識,主要想為大家提供完整學(xué)習(xí)路線,讓大家的知識體系更加完善! (1)參考:https://www.cnblogs.com/lvchaoshun/p/7816288.html (1)參考:

    2023年04月08日
    瀏覽(31)
  • 【單元測試】Junit 4(三)--Junit4斷言

    ? **斷言(assertion)**是一種在程序中的一階邏輯(如:一個(gè)結(jié)果為真或假的邏輯判斷式),目的為了表示與驗(yàn)證軟件開發(fā)者預(yù)期的結(jié)果——當(dāng)程序執(zhí)行到斷言的位置時(shí),對應(yīng)的斷言應(yīng)該為真。若斷言不為真時(shí),程序會中止執(zhí)行,并給出錯(cuò)誤信息。 這里我們直接上例子 接下來我們

    2024年02月08日
    瀏覽(19)
  • 白盒測試(單元測試JUnit使用斷言assertThat中startsWith、endsWith方法)

    目錄 一、背景知識 二、assertThat-字符串相關(guān)匹配符 1、startsWith 2、endsWith 三、代碼

    2024年02月07日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包