<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          你常常看到 Python 代碼中的 assert 是個(gè)啥?

          共 1315字,需瀏覽 3分鐘

           ·

          2020-09-10 15:45


          之前咱們說(shuō)過(guò)單元測(cè)試相關(guān)的用法,今天給你講的這個(gè)也是經(jīng)常會(huì)在代碼中使用到的,倘若你看過(guò)一些 Python 的項(xiàng)目源代碼,想必你應(yīng)該會(huì)看到它的身影 —— assert





          什么是 assert 呢?

          其實(shí)不止 Python ,很多主流的語(yǔ)言都有 assert ,它主要是用來(lái)檢測(cè)調(diào)試你的代碼問(wèn)題,當(dāng)你使用 assert 來(lái)檢測(cè)你的代碼的時(shí)候,如果是 True ,它就會(huì)直接通過(guò),當(dāng)它是 False 的時(shí)候,就會(huì)拋出錯(cuò)誤,然后你就可以根據(jù)錯(cuò)誤進(jìn)行定位,從而在具體的位置修改代碼。

          怎么使用 assert 呢?

          assert 的使用是這樣,使用 assert 關(guān)鍵字,后面添加條件就可以了:

          assert 條件

          看下這樣簡(jiǎn)單的例子你就明白了:




          可以看到當(dāng)條件為 True 就直接通過(guò)了, False 就拋出 AssertionError。

          通常情況下, assert 條件為 Fasle 之后,后面還可以添加你自定義的錯(cuò)誤信息:

          assert 條件 ,?“你定義的錯(cuò)誤信息”

          像這樣:




          其實(shí) assert 相當(dāng)于這樣:

          if not condition:
          raise AssertionError()

          所以,當(dāng)你對(duì)某些操作能夠肯定它什么是對(duì)的,什么是錯(cuò)的時(shí)候,你就可以在代碼中使用 assert 進(jìn)行檢測(cè),比如說(shuō)有一個(gè)方法,需要傳入 int 參數(shù),但是它不能為 0 ,那么你就可以這樣:




          還有些時(shí)候?qū)?shù)類型的檢測(cè)也可以使用 assert ,通過(guò) isinstance 進(jìn)行判斷,像這樣:




          當(dāng)我們傳入 list 類型沒(méi)問(wèn)題,但是傳入別的類型就會(huì)告訴我們錯(cuò)誤信息:




          在使用 assert 的時(shí)候,有一點(diǎn)需要注意的是,通過(guò)命令來(lái)運(yùn)行的時(shí)候,使用 python3 -O xxx.py 可以直接忽略掉 xxx.py 文件中所定義的所有 assert。

          比如在上面的例子中,我傳入的不是 list 類型,但是我使用命令添加了 -O 選項(xiàng),就會(huì)忽略我的 assert :




          所以你在使用 assert 的時(shí)候要注意一點(diǎn)的是,如果你對(duì)一些條件是能夠確定的,可以使用 assert ,但是對(duì)于一些涉及到對(duì)數(shù)據(jù)的增刪改的時(shí)候,最好就不要去使用 assert 了,比如這樣:




          在正常的運(yùn)行下,這樣的操作可以在一定程度上避免了用戶和權(quán)限相關(guān)問(wèn)題,但是如果我們直接用 python3 -O xxx.py 執(zhí)行, assert 瞬間失去了作用,那這時(shí)候是不是就可以直接 update 了呢?顯然這樣做是有 bug 的。

          所以對(duì)于涉及到數(shù)據(jù)的增刪改,還是用我們之前說(shuō)過(guò)的 try…except,raise 對(duì)代碼進(jìn)行異常解決為好。而對(duì)于一些數(shù)據(jù)類型的檢測(cè)以及你已知的條件斷言,直接使用 assert 可以讓你的代碼更加健壯一些。

          ok,以上就是小帥b今天給你帶來(lái)的分享,希望對(duì)你有一絲絲幫助,那么我們會(huì)下回見(jiàn)咯,peace!


          掃一掃

          學(xué)習(xí) Python 沒(méi)煩惱




          瀏覽 55
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  午夜精品久久久久久久91蜜桃 | 色色成人视频 | 性欧美tube | 操逼逼香蕉网 | 欧美黑人大鸡巴操逼视频 |