Python軟體測試學習6 異常機制

2021-09-29 15:24:32 字數 4162 閱讀 7619

python的異常機制

6.1 了解異常

異常機制定義:異常機制是指程式執行過程**現錯誤而進行處理操作。

異常機制作用:一般情況下,程式在執行**現錯誤會停止執行並傳送錯誤資訊,如果在程式中加入異常機制,

當程式執行**現錯誤時,它會捕捉錯誤資訊並執行相應的處理,這樣保證程式繼續執行。

異常的定義:異常是程式在執行過程**現問題而導致程式無法執行。

例:程式的邏輯或演算法錯誤、計算機的資源不足或io錯誤等

注:不管是哪一種異常,只要程式執行**現錯誤都可以認為是異常,並且丟擲異常資訊。我們可以感覺異常資訊了解異常的具體資訊

舉例說明:

"c:\program files\python37\python.exe" f:/python_study/除錯檔案.py

file "f:/python_study/除錯檔案.py", line 23

s = studen('lucy')

^nameerror: name 'student' is not defined

從異常資訊看,traceback是異常跟蹤資訊,從file "f:/python_study/除錯檔案.py", line 23看,在除錯檔案.py檔案裡的第23行出現錯誤

s = studen('lucy')是程式錯誤的具體位置,最後一行是這個異常的錯誤型別和說明錯誤原因的提示資訊。

nameerror是錯誤型別,name 'student' is not defined是錯誤原因,這個錯誤原因是指**中的student沒有定義

python的異常是由類定義的,所有的異常都來自於baseexception類。不同型別的異常都繼承自父類baseexception。

異常類的結構如下:

baseexception(所有異常的基類)

keyboardinterrupt(鍵盤中斷) exception(異常:nameerror、valueerror、ioerror、importerror等) systemexit(python直譯器退出)

解釋:baseexception的子類有keyboardinterrupt、exception和systemexit。而所有異常都是由子類exception定義和描述。

常見異常如下:

# python的異常類表

# 異常類 說明

# attributeerror 訪問乙個物件沒有的屬性,比如foo.x ,但是foo沒有屬性x

# ioerror 輸入輸出異常,如無法開啟檔案

# importerror 無法引入模組或包,通常是路徑問題或名稱錯誤

# indentationerror 語法錯誤,**沒有正確對齊

# indexerror 下標索引超出序列邊界

# keyerror 訪問字典裡不存在的鍵

# keyboardinterrupt 使用者中斷執行

# nameerror 訪問乙個沒有申明的變數或物件

# syntaxerror 語法錯誤,**出現錯誤

# typeerror 傳入物件型別與定義的不符合

# unboundlocalerror 訪問乙個還未被設定的區域性變數

# valueerror 傳入無效的引數或數值

# unicodeerror 編碼的相關錯誤

# taberror tab和空格混用

# memoryerror 計算機記憶體溢位錯誤

# overflowerror 數值運算超出最大限制

6.2  捕捉異常

對異常資訊有了一定了解後,使用異常機制對這些異常進行捕捉並處理

python的異常機制語法如下

try:

# 程式執行的**

except nameerror as err:

# 只捕捉nameerror的錯誤型別

print('出錯了,錯誤資訊是:', err)

except exception as err:

# 捕捉全部的錯誤型別

print('出錯了,錯誤資訊是:', err)

except:

# 捕捉全部的錯誤型別,但是沒有錯誤資訊

print('出錯了')

else:

print('如果無異常就執行此處**')

finally:

print('不管是否異常都執行此處**')

其中try和except是必不可少的,else和finally可以根據實際需求來決定是否新增。

try:用於檢測程式**是否出現異常,檢測的**可以是程式的全部**或程式的部分**

例:

if __name__ == '__main__':

try:

s = student('laogang')

pass

except nameerror as err:

print('這是nameerror錯誤,錯誤資訊是:' , err)

except exception as err:

print('這是exception錯誤,錯誤資訊是:' , err)

else:

print('如果沒有異常執行此處**')

finally:

print('不管有沒有異常都會執行此處**')

執行結果如下:

"c:\program files\python37\python.exe" f:/python_study/除錯檔案.py

這是nameerror錯誤,錯誤資訊是: name 'student' is not defined

不管有沒有異常都會執行此處**

由於student是未定義的變數或物件,因此程式在執行過程中會出現nameerror異常,異常資訊會被except nameerror as err所捕捉,並執行相應處理。

最後程式還會執行finally裡面的**。

例:

if __name__ == '__main__':

try:

s = student('laogang')

except exception as err:

try:

print('這是第乙個錯誤,錯誤資訊是:', err)

s = student('laogang')

except exception as err:

print('這是第二個錯誤,錯誤資訊是:', err)

6.3 自定義異常

異常一般是由程式執行過程中遇到錯誤的時候而生成的,但有時候我們也需要自己丟擲一些異常資訊,讓程式去捕捉和處理

自定義異常丟擲除了監測錯誤之外,還可以用於**的布局設計和程式的邏輯控制,通過丟擲異常可以執行不同的**塊。if __name__ == '__main__':

try:

raise nameerror('自定義異常丟擲')

except exception as err:

print('這是exception錯誤')

說明:上述示例主動丟擲nameerror異常,nameerror是已經定義好的異常類。

如果在自定義異常丟擲或異常捕捉的時候不想使用python內建的異常類,可以自定義乙個異常類。只要自定義的異常類繼承exception類即可。

例:

class myerror(exception):

pass

if __name__ == '__main__':

try:

# 拋出自定義異常

raise myerror('自定義異常丟擲')

# 捕捉自定義異常類

except exception as err:

print('這是myerror錯誤,錯誤資訊是:', err)

說明:在自定義異常myerror中,**中的pass是乙個空語句,這是為了保持程式結構的完整性。它不會做任何事情,只用於佔位。

軟體測試學習6 動態白盒測試

動態白盒測試 動態白盒測試是指利用檢視 功能和實現方式得到的資訊來確定哪些需要測試 哪些不需要測試 如何開展測試。動態白盒測試的另乙個常用名詞是結構化測試。因為軟體測試員可以檢視並使用 的內部結構。從而設計和執行測試。動態白盒測試包括以下4個部分 1.直接測試底層函式 過程 子程式和庫。2.以完整程...

python從事軟體測試 python學習

1 python的資料結構有列表 可變 元組 不可變 字典 只能用不可變元素作為鍵值 字串也是不可變的 2 time.strftime y m d h m s 函式 我們使用加法操作符來 級連 字串,即把兩個字串連線在一起返回乙個新的字串。3 字串join方法把source列表轉換為字串 join ...

Python基礎學習6 程式的異常處理

try 可能出現異常的 except 異常型別 如果try中 丟擲異常被except捕獲,則執行此處 可看作雙分支結構,else 中 只有在 try 中 正常執行時執行。如果 except 執行了,except 執行完了不會執行 else 中 try 可能出現異常的 except 如果try中 丟擲...