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中 丟擲...