淺談Python的異常處理

來源:互聯網
上載者:User
這篇文章主要介紹了淺談Python的異常處理的相關資料,需要的朋友可以參考下

Python的異常處理能力是很強大的,可向使用者準確反饋出錯資訊。在Python中,異常也是對象,可對它進行操作。所有異常都是基類Exception的成員。所有異常都從基類Exception繼承,而且都在exceptions模組中定義。Python自動將所有異常名稱放在內建命名空間中,所以程式不必匯入exceptions模組即可使用異常。Python用異常對象(exception object)表示異常情況,遇到錯誤後,會引發異常。如果異常對象並未被處理或捕捉,程式就會用所謂的回溯(Traceback,一種錯誤資訊)終止執行。

注意:雖然大多數錯誤會導致異常,但一個異常不一定代表錯誤,有時候它們只是一個警告,有時候它們可能是一個終止訊號,比如退出迴圈等。

一.與python異常相關的關鍵字

raise:手動拋出/引發異常:raise [exception[,data]
try/except:捕獲異常並處理
pass:忽略異常
as:定義異常執行個體(except IOError as e)
finally:無論是否出現異常,都執行的代碼]
else:如果try中的語句沒有引發異常,則執行else中的語句
except Exception as error:

二.python中的異常類型

1.StandardError類:如果程式上出現邏輯錯誤, 將引發該異常。StandardError類是所有內斂異常的基類,放置在預設的命名空間中,因此使用IOEroor, EOFError, ImportError等類,不需要匯入exception模組。

StopIteration類:判斷迴圈是否執行到尾部,如果迴圈到尾部,則拋出該異常。
GeneratorExit類:是由Generator函數引發的異常,當調用close()時引發該異常。
Warning類:表示程式中的代碼引起的警告。

三.基本方式:

1.try:

語句1

except [exception1(,exception2...),[data…]]:

語句2

else:

語句3

該種異常處理文法的規則是:

· 執行try下的語句,如果引發異常,則執行過程會跳到第一個except語句。

· 如果第一個except中定義的異常與引發的異常匹配,則執行該except中的語句。

· 如果引發的異常不匹配第一個except,則會搜尋第二個except,允許編寫的except數量沒有限制。

· 如果所有的except都不匹配,則異常會傳遞到下一個調用本代碼的最高層try代碼中。

· 如果沒有發生異常,則執行else塊代碼。

import tracebacktry:  1/0except Exception as err:  print(err)try:  f = open("file.txt","r")except IOError as e:  print(e)try:  f = open("file.txt","r")except Exception as e:  print(e)

最後兩個的輸出是一模一樣的---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2.try:

語句1

finally:

語句2

該語句的執行規則是:

· 執行try下的代碼。

· 如果發生異常,在該異常傳遞到下一級try時,執行finally中的代碼。

· 如果沒有發生異常,則執行finally中的代碼。

第二種try文法在無論有沒有發生異常都要執行代碼的情況下是很有用的。例如我們在python中開啟一個檔案進行讀寫操作,我在操作過程中不管是否出現異常,最終都是要把該檔案關閉的。這兩種形式相互衝突,使用了一種就不允許使用另一種,而功能又各異

所以,一般情況下,finally裡面執行的都是一些清理工作,比如:關閉檔案描述符,釋放鎖等

注意,finally中,如果出現異常,外部如果沒有相應的捕獲機制,該異常會層層拋出,直到最頂端,然後解譯器停止。一般在外層再加一次try except異常捕獲

三.手動使用raise引發異常

1.raise [exception[,data]]

2.在Python中,要想引發異常,最簡單的形式就是輸入關鍵字raise,後跟要引發的異常的名稱。異常名稱標識出具體的類:Python異常是那些類的對象。執行raise語句時,Python會建立指定的異常類的一個對象。raise語句還可指定對異常對象進行初始化的參數。為此,請在異常類的名稱後添加一個逗號以及指定的參數(或者由參數構成的一個元組)。

3.執行個體:

try:  print("開始測試")  raise IOErrorexcept IOError:  print("定義好的錯誤")except:  print("別的錯誤")
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.