中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Python自動化測試中實現異常處理機制

發布時間:2023-05-08 11:07:06 來源:億速云 閱讀:127 作者:zzz 欄目:編程語言

這篇文章主要介紹了怎么在Python自動化測試中實現異常處理機制的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇怎么在Python自動化測試中實現異常處理機制文章都會有所收獲,下面我們一起來看看吧。

    一、前言

    主要講解Python中異常介紹、捕獲、處理相關知識點內容

    二、異常處理合集

    2.1 異常處理講解

    在正式介紹異常處理之前,需要先讓大家了解一個概念:編程是不可能存在完美的,總有考慮不到的情況,因為人無完人,人類是有缺陷的,更何況編程是出自人類之手,在真實項目中不要相信任何人所說的:我的代碼是完美的、這個絕對不會有問題類似的話,要知道在編程的世界里,沒有絕對的可靠。

    大家也應該清楚了,只要是人所編寫的程序就一定會存在問題,程序不按照正常流程執行,我們就稱之為異常,異常處理顧名思義就是解決這種異常的情況,能夠讓程序正常按照邏輯和流程執行。

    2.2 異常捕獲

    當一個程序執行報錯時會終止運行,我們進行異常處理后再次運行就不會再出現報錯,能夠捕獲到這個報錯讓程序順利運行,這個異常處理的過程我們稱之為異常捕獲,讓我們先看一個例子:

    print("------------------- 歡迎來到報名注冊系統 -------------------")
     
    age = (input("請輸入您的年齡:"))
    age = int(age)
    if age < 18:
        print("很遺憾,您暫時不滿足注冊條件")
    else:
        print("恭喜您符合注冊條件")

    怎么在Python自動化測試中實現異常處理機制

    如上代碼所示,輸入的數據為18時,能夠正常的進行程序的邏輯計算,從而正常執行代碼直至結束,但這樣的代碼真的沒有問題嗎?我們再看這個例子,當輸入為abc英文字母時,出現了ValueError的錯誤,字面的意思是告訴我們出現了數值錯誤,無法將字符串轉換為整型:

    print("------------------- 歡迎來到報名注冊系統 -------------------")
     
    age = (input("請輸入您的年齡:"))
    age = int(age)
    if age < 18:
        print("很遺憾,您暫時不滿足注冊條件")
    else:
        print("恭喜您符合注冊條件")

    怎么在Python自動化測試中實現異常處理機制

    如上圖所示,出現了ValueError報錯時,我們就可以通過異常捕獲進行處理,處理后的代碼為:

    print("------------------- 歡迎來到報名注冊系統 -------------------")
    age = (input("請輸入您的年齡:"))
     
    try:
        age = int(age)
    except:
        print("您的年齡輸入非法,請重新運行本程序")
     
    if age < 18:
        print("很遺憾,您暫時不滿足注冊條件")
    else:
        print("恭喜您符合注冊條件")

    怎么在Python自動化測試中實現異常處理機制

    如上圖所示,我們再次執行該程序并輸入abc,程序仍然無法運行,已經不是剛剛的ValueError報錯了,現在的報錯是TypeError報錯。

    2.3 異常捕獲原理

    要解決上面的TypeError的報錯,我們先來了解下異常捕獲的原理,當正式開始一個try語句后,Python會在當前程序的上下文中作標記,當異常出現時返回標記處,try子句先執行,后續可能會發生的場景:

    場景一: 如果執行try語句時發生異常,Python跳回至try并執行第一個匹配該異常的except子句,異常處理完畢,繼續執行代碼。

    場景二: 如果執行try語句時發生異常,且沒有匹配的except子句,異常將被遞交到上層的try或是程序的最上層,到此結束程序,打印錯誤信息。

    場景三: 如果在try子句執行時沒有發生異常,Python將繼續執行代碼語句。

    當我們了解了異常捕獲的原理后在來看下之前的TypeError報錯如何解決,字面意思類型錯誤,整型無法與字符串進行比較,但實際上在此之前我們就已經對變量age進行了處理,但因為捕獲到了try的異常,執行了第一個匹配try的except子句,而子句又代替異常的語句,故此這里的類型轉換就失效了,再次進行程序的運行就會出現類型錯誤,解決這個辦法也很簡單,只需要把判斷語句也放在try中。

    當判斷語句放到try中就稍微改變了一點點,如果沒有捕獲異常,程序照常執行,判斷會生效,如果捕獲到了異常,那么會直接跳轉到except執行輸出,提示您的年齡非法,就不會在有判斷的邏輯,因此也不會在出現TypeError的錯誤了,順帶一提,這就是我們常見的開發Bug “買一送一” ,二次修改的代碼如下:

    # 程序仍然有可優化的地方,僅展示try.. except語句的使用方式
    print("------------------- 歡迎來到報名注冊系統 -------------------")
    age = (input("請輸入您的年齡:"))
     
    try:
        age = int(age)
        if age < 18:
            print("很遺憾,您暫時不滿足注冊條件")
        else:
            print("恭喜您符合注冊條件")
    except:
        print("您的年齡輸入非法,請重新運行本程序")

    怎么在Python自動化測試中實現異常處理機制

    怎么在Python自動化測試中實現異常處理機制

    怎么在Python自動化測試中實現異常處理機制

    2.4 特定異常捕獲

    特定異常捕獲顧名思義就是針對某一個出現的特定異常進行捕獲,例如我們所遇到的ValueError,如果你捕獲的是其他異常類型,那么在代碼執行時碰到了ValueError仍然會出現報錯:

    print("------------------- 歡迎來到報名注冊系統 -------------------")
    age = (input("請輸入您的年齡:"))
     
    try:
        age = int(age)
        if age < 18:
            print("很遺憾,您暫時不滿足注冊條件")
        else:
            print("恭喜您符合注冊條件")
    # 這里進行捕獲的異常類型是IndexError,非ValueError,最后的結果仍然會報錯,因為沒有成功捕獲
    except IndexError:
        print("您的年齡輸入非法,請重新運行本程序")

    怎么在Python自動化測試中實現異常處理機制

    當捕獲的類型錯誤時,仍然會彈出報錯終止程序運行,好比一個人酒駕,那么就應該由交警處理而不是民政局的人處理,因為那不是它的職責,異常捕獲還要講究對口,如下代碼所示,如果設置成ValueError就能夠成功進行捕獲,就好比交警處理了酒駕一樣,完美解決:

    print("------------------- 歡迎來到報名注冊系統 -------------------")
    age = (input("請輸入您的年齡:"))
     
    try:
        age = int(age)
        if age < 18:
            print("很遺憾,您暫時不滿足注冊條件")
        else:
            print("恭喜您符合注冊條件")
    except ValueError:
        print("您的年齡輸入非法,請重新運行本程序")

    怎么在Python自動化測試中實現異常處理機制

    2.5 異常捕獲的處理

    剛剛我們舉了一個例子,當異常捕獲為IndexError時,運行程序后仍然會出現ValueError的錯誤,但我們不設置直接使用except時反而能直接捕獲,那我們還要設置它做什么呢?想必有部分同學心中已經會產生這樣的疑問了。

    except可以理解為萬能警察,萬能捕手,它可以捕獲所有的異常類型(極少數無法直接捕獲),而特定的異常捕獲只能捕獲特定出現的異常情況,我們之所以還要使用,是因為它是專門捕獲一種類型的,好比一個人有皮膚問題,那么肯定是掛皮膚科門診要比急診科的醫生要更加專業,正所謂術業有專攻。

    except因為是萬能捕手,所以它在抓獲異常后的處理方式是一樣的,好比感冒和心臟病發作兩種癥狀,都是同樣的對待方式顯然是不合理的,那么這個時候就會由特定的“醫生” (特定捕獲) 進行對應的處理方式。

    目前常見的一些報錯有:ValueError、TypeError、IndexError等等,那么在整個自動化測試的過程中,勢必會遇到很多其他的報錯,當我們不清楚其他報錯的情況下如何進行異常捕獲呢?兩種方式,第一種是錯過一次就記得了,好比一開始進行編程的小伙伴們,誰也不知道會遇到ValueError一樣,當碰到過一次后,下一次就會特別注意這個事情,提前做一個捕獲,俗稱踩坑。那另外一種方式就是在末尾繼續添加except,萬能捕手我們也留著,這樣當特定捕獲沒有捕獲到異常但程序出現了異常時,except就會進行捕獲:

    print("------------------- 歡迎來到報名注冊系統 -------------------")
    age = (input("請輸入您的年齡:"))
     
    try:
        age = int(age)
        if age < 18:
            print("很遺憾,您暫時不滿足注冊條件")
        else:
            print("恭喜您符合注冊條件")
    # 這里會報錯ValueError,因為捕獲的類型是IndexError,很明顯無法進行ValueError異常捕獲,那么我們可以在添加一個萬能捕手except來進行捕獲
    except IndexError:
        print("您的年齡輸入非法,請重新運行本程序")
    # 在下面可以在進行一個except的添加:
    except:
        print("萬能捕手在此,束手就擒吧!")

    怎么在Python自動化測試中實現異常處理機制

    2.6 except、Exception與BaseException

    except我們知道了是萬能捕手,但其實它的身份是Exception,Python默認幫我們省略了,實際上它是這樣的:

    except Exception:
        print("萬能捕手在此,束手就擒吧!")

    except與except Exception完全等價,日常的編寫時可加可不加,依據個人習慣和喜好決定即可。而BaseException是Exception的父類,作為子類的Exception無法截獲父類BaseException類型的錯誤。

    BaseException: 包含所有built-in exceptions

    Exception: 不包含所有的built-in exceptions,只包含built-in, non-system-exiting exceptions,像SystemExit類型的exception就不包含在其中。Python所有的錯誤都是從BaseException類派生的

    2.7 finally用法

    finally的作用是無論except是否成功捕獲到了對應的異常,均需要執行finally下的代碼:

    """
    參考如下代碼:打開了love.txt這個文件,進行了閱讀,又想寫入一點東西,但現在是只讀的模式,無法進行內容寫入,故此會報錯io.UnsupportedOperation
    雖然沒有寫入成功,但是這個文件是成功讀取了的,那么在文件的章節中提到過,如果打開了一個文件要記得關閉,否則其他人無法使用
    所以在finally這里我們就可以加上f.close(),代表著無論是否有捕捉到異常,最后我都要關閉這個文件,以確保其他人能夠正常使用該文件
    """
     
    import io
     
    try:
        f = open("love.txt", encoding="utf-8", mode="r")
        f.read()
        f.write("隨便寫點~")
    except io.UnsupportedOperation:
        print("抓的就是你這個io.UnsupportedOperation報錯")
    finally:
        # finally的作用是無論except是否成功捕獲到了對應的異常,均需要執行finally下的代碼
        f.close()
    2.8 異常信息的打印輸出

    雖然我們能夠捕獲異常,但我們肯定要了解到底是什么異常,在捕獲到一個異常時我們可以進行異常信息的打印:

    print("------------------- 歡迎來到報名注冊系統 -------------------")
    age = (input("請輸入您的年齡:"))
     
    try:
        age = int(age)
        if age < 18:
            print("很遺憾,您暫時不滿足注冊條件")
        else:
            print("恭喜您符合注冊條件")
    # 這里會報錯ValueError,捕獲的是IndexError,很明顯無法進行異常捕獲,那么我們可以在添加一個萬能捕手except來進行捕獲
    except IndexError as error:
        print("您的年齡輸入非法,請重新運行本程序")
    # 在這里加一個as,后面接一個變量,然后進行變量打印即可,當出現對應的異常時就會打印對應異常的信息
    except Exception as error:
        print("萬能捕手在此,束手就擒吧!", f"已捕獲異常:{error}")

    怎么在Python自動化測試中實現異常處理機制

    剛剛有提到except與except Exception是等價的,但是如果想使用as必須要使用后者,這是語法規定:

    # 正確用法,在捕獲類型后加as 變量
    except Exception as error:
        print("萬能捕手在此,束手就擒吧!", f"已捕獲異常:{error}")
     
    # 錯誤的用法,不符合語法規則
    except as error:
        print("萬能捕手在此,束手就擒吧!", f"已捕獲異常:{error}")

    關于“怎么在Python自動化測試中實現異常處理機制”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“怎么在Python自動化測試中實現異常處理機制”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    商都县| 崇左市| 海伦市| 浙江省| 镇雄县| 贺州市| 鹿邑县| 枞阳县| 廊坊市| 仲巴县| 全南县| 西和县| 辽宁省| 扎囊县| 南靖县| 东乡| 亚东县| 桂阳县| 高雄县| 阳信县| 民丰县| 江永县| 阿勒泰市| 余干县| 梁平县| 镇巴县| 昆明市| 承德市| 迁西县| 阿勒泰市| 拉萨市| 特克斯县| 西城区| 塔河县| 沂水县| 临沂市| 原平市| 万荣县| 萨迦县| 霞浦县| 阳曲县|