一、任務描述
本實驗任務主要對Python異常進行一些基本操作,通過完成本實驗任務,要求學生熟練掌握Python異常的基本操作。並對異常的基本操作進行整理並填寫工作任務報告。
二、任務目標
1、掌握Python異常的捕獲
2、掌握Python異常的處理
三、任務環境
Ubuntu16.04、Python2.7
四、任務分析
異常即是一個事件,該事件會在程序執行過程中發生,影響了程序的正常執行。
一般情況下,在Python無法正常處理程序時就會發生一個異常。
異常是Python對象,表示一個錯誤。
當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。
五、任務實施
步驟1、環境准備
右擊Ubuntu操作系統桌面,從彈出菜單中選擇【Open in Terminal】命令打開終端。
通過【cd /home】切換到home目錄下。【ls】查看該目錄下的所有內容。

【mkdir except】在home目錄下創建except文件夾。

步驟2、捕捉異常
【cd except】切換到except目錄下,【vim except1.py】回車后創建並編輯名為except1的Python文件

回車后進入編輯框內,按鍵盤【i】進入編輯狀態,輸入如下程序。
分別獲取用戶輸入的x與y值,並進行除法運算。

編輯完畢后,按【esc】退出編輯狀態,【:wq】保存並退出編輯框,【python except1.py】執行except1的Python文件。
分別輸入第一個數字6,第二個數字0。回車后報ZeroDivisionError異常,該異常在除法或者模除操作的第二個參數為0時引發。

再次進入except1.py文件編輯狀態,修改程序。

再次運行except1.py程序。再次輸入第一個數字6,第二個數字0。回車后不報異常,並將except后的打印語句輸出。根據結果證明try/except將異常捕捉並處理

如果用戶在提示符后面輸入非數字類型的值,就會產生另外一個異常。
運行except1.py程序,輸入第一個數字6,第二個值為’shiyanbar’,回車后報TypeError異常。

因為except子句只尋找ZeroDivisionError異常,這次的錯誤就溜過了檢查並導致程序終止。
捕捉這個異常,可以直接在同一個try/except語句后面加上另一個except字句。
再次進入except1.py文件編輯狀態,修改程序。

再次運行except1.py程序。再次輸入第一個數字6,第二個值為’shiyanbar’。回車后不報異常,並將except后的打印語句輸出。

當然這種解決辦法可以捕獲異常,但產生的問題是程序中會增加一大堆可能錯誤情況的except,會讓代碼相當的難讀。
如果需要用一個塊解決多個類型異常,可以將它們作為元組列出。
再次進入except1.py文件編輯狀態,修改程序即可。

如果想讓程序繼續運行,但是又因為某種原因想記錄下錯誤。
再次進入except1.py文件編輯狀態,修改程序。程序會打印異常,並且程序會繼續運行。

再次運行except1.py程序。再次輸入第一個數字6,第二個值為0。回車后不報異常,並將異常的信息輸出。

就算程序中能處理好幾種類型的異常,但有些異常還是會從眼皮下溜走。
再次運行except1.py程序。再次輸入第一個數字6,第二個值為空。回車后報SyntaxError異常。

可以用一段代碼捕捉所有異常,可以在except子句中忽略所有的異常類。
再次進入except1.py文件編輯狀態,修改程序。
像這樣捕捉所有的異常是危險的,因為會隱藏程序員未想到並且未做好准備處理的錯誤等。這時使用except Exception,e會更好些。

在有些情況中,沒有異常發生執行一段代碼是很有用的,可以像對條件和循環語句那樣,給try/except添加個else字句。
再次進入except1.py文件編輯狀態,修改程序。
這里的循環只在沒有異常發生引發的情況下才會退出(由else字句中的break語句退出),只要有錯誤發生,程序會不斷要求重新輸入,並將異常信息打印。

再次運行except1.py程序。
再次輸入第一個數字6,第二個值為0。回車后報’integer division or modulo by zero’異常。
再次輸入第一個數字6,第二個值為’shiyanbar’,回車后報’unsupported operand type(s) for /: ‘int’ and ‘str’’。
再次輸入第一個數字6,第二個值為3,得到除結果。

最后,finally字句可以用來在可能的異常后進行清理,和try聯合使用。
通過【vim except2.py】創建並編輯名為except2的Python文件。編輯如下代碼。
在程序中,finally字句肯定會被執行,不管try字句中是否發生異常。

【python except2.py】運行python文件,在程序崩潰之前,對於變量x的清理完成。
因為使用del語句刪除一個變量是非常不負責的清理手段,所有finally子句用於關閉文件或關閉因系統錯誤而無法正常釋放的資源。比如文件關閉,釋放鎖,把數據庫連接返還給連接池等
