Python異常捕獲與處理


一、任務描述

  本實驗任務主要對Python異常進行一些基本操作,通過完成本實驗任務,要求學生熟練掌握Python異常的基本操作。並對異常的基本操作進行整理並填寫工作任務報告。

二、任務目標

1、掌握Python異常的捕獲

2、掌握Python異常的處理

三、任務環境

Ubuntu16.04、Python2.7

四、任務分析

  異常即是一個事件,該事件會在程序執行過程中發生,影響了程序的正常執行。

  一般情況下,在Python無法正常處理程序時就會發生一個異常。

  異常是Python對象,表示一個錯誤。

  當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。

五、任務實施

步驟1、環境准備

  右擊Ubuntu操作系統桌面,從彈出菜單中選擇【Open in Terminal】命令打開終端。

  通過【cd /home】切換到home目錄下。【ls】查看該目錄下的所有內容。

 

圖1 切換目錄

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

圖2 創建文件夾

步驟2、捕捉異常

  【cd except】切換到except目錄下,【vim except1.py】回車后創建並編輯名為except1的Python文件

圖3 創建Python文件

  回車后進入編輯框內,按鍵盤【i】進入編輯狀態,輸入如下程序。

  分別獲取用戶輸入的x與y值,並進行除法運算。

圖4 編輯Python文件

  編輯完畢后,按【esc】退出編輯狀態,【:wq】保存並退出編輯框,【python except1.py】執行except1的Python文件。

  分別輸入第一個數字6,第二個數字0。回車后報ZeroDivisionError異常,該異常在除法或者模除操作的第二個參數為0時引發。

圖5 運行Python文件

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

圖6 編輯Python文件

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

圖7 運行Python文件

  如果用戶在提示符后面輸入非數字類型的值,就會產生另外一個異常。

  運行except1.py程序,輸入第一個數字6,第二個值為’shiyanbar’,回車后報TypeError異常。

圖8 運行Python文件

  因為except子句只尋找ZeroDivisionError異常,這次的錯誤就溜過了檢查並導致程序終止。

  捕捉這個異常,可以直接在同一個try/except語句后面加上另一個except字句。

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

圖9 編輯Python文件

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

圖10 運行Python文件

  當然這種解決辦法可以捕獲異常,但產生的問題是程序中會增加一大堆可能錯誤情況的except,會讓代碼相當的難讀。

  如果需要用一個塊解決多個類型異常,可以將它們作為元組列出。

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

圖11 編輯Python文件

  如果想讓程序繼續運行,但是又因為某種原因想記錄下錯誤。

  再次進入except1.py文件編輯狀態,修改程序。程序會打印異常,並且程序會繼續運行。

圖12 運行Python文件

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

圖13 運行Python文件

  就算程序中能處理好幾種類型的異常,但有些異常還是會從眼皮下溜走。

  再次運行except1.py程序。再次輸入第一個數字6,第二個值為空。回車后報SyntaxError異常。

圖14 運行Python文件

  可以用一段代碼捕捉所有異常,可以在except子句中忽略所有的異常類。

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

  像這樣捕捉所有的異常是危險的,因為會隱藏程序員未想到並且未做好准備處理的錯誤等。這時使用except Exception,e會更好些。

圖15 運行Python文件

  在有些情況中,沒有異常發生執行一段代碼是很有用的,可以像對條件和循環語句那樣,給try/except添加個else字句。

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

  這里的循環只在沒有異常發生引發的情況下才會退出(由else字句中的break語句退出),只要有錯誤發生,程序會不斷要求重新輸入,並將異常信息打印。

圖16 編輯Python文件

  再次運行except1.py程序。

  再次輸入第一個數字6,第二個值為0。回車后報’integer division or modulo by zero’異常。

  再次輸入第一個數字6,第二個值為’shiyanbar’,回車后報’unsupported operand type(s) for /: ‘int’ and ‘str’’。

  再次輸入第一個數字6,第二個值為3,得到除結果。

圖17 運行Python文件

  最后,finally字句可以用來在可能的異常后進行清理,和try聯合使用。

  通過【vim except2.py】創建並編輯名為except2的Python文件。編輯如下代碼。

  在程序中,finally字句肯定會被執行,不管try字句中是否發生異常。

圖18 編輯Python文件

  【python except2.py】運行python文件,在程序崩潰之前,對於變量x的清理完成。

  因為使用del語句刪除一個變量是非常不負責的清理手段,所有finally子句用於關閉文件或關閉因系統錯誤而無法正常釋放的資源。比如文件關閉,釋放鎖,把數據庫連接返還給連接池等

圖19 運行Python文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM