您好,登錄后才能下訂單哦!
什么是異常處理
定義:異常處理就是我們在寫Python時,經常看到的報錯信息,例如;NameError TypeError ValueError等,這些都是異常。
異常是一個事件,改事件會在程序執行過程中發生,影響程序的正常執行,一般情況下,在python中無法處理程序時就會發生異常,異常時Python的一個對象,表示一個錯誤,當Python腳本發生異常時,我們需要捕獲并處理異常,否則程序就會終止執行。
Python 使用被稱為 異常 的特殊對象來管理程序執行期間發生的錯誤。每當發生讓 Python 不知所措的錯誤時,它都會創建一個異常對象。如果你編寫了處理該異常的代碼,程序將繼續運行;如果你未對異常進行處理,程序將停止,并顯示一個 traceback ,其中包含有關異常的報告。異常是使用 try-except 代碼塊處理的。 try-except 代碼塊讓 Python 執行指定的操作,同時告訴 Python 發生異常時怎么辦。使用了 try-except 代碼塊時,即便出現異常,程序也將繼續運行:顯示你編寫的友好的錯誤消息,而不是令用戶迷惑的 traceback 。
處理ZeroDivisionError異常
下面來看一種導致 Python 引發異常的簡單錯誤。你可能知道不能將一個數字除以 0 ,但我們還是讓 Python 這樣做吧:
print(5/0)
報錯:
Traceback (most recent call last):
File "test.py", line 2, in <module>
print(5/0)
ZeroDivisionError: integer division or modulo by zero
使用 try-except 代碼塊
當你認為可能發生了錯誤時,可編寫一個 try-except 代碼塊來處理可能引發的異常。你讓 Python 嘗試運行一些代碼,并告訴它如果這些代碼引發了指定的異常,該怎么辦。
處理 ZeroDivisionError 異常的 try-except 代碼塊類似于下面這樣:
try: print(5/0) except ZeroDivisionError: print("You can't divide by zero!") # You can't divide by zero!
如果 try-except 代碼塊后面還有其他代碼,程序將接著運行,因為已經告訴了 Python 如何處理這種錯誤。
使用異常避免崩潰
發生錯誤時,如果程序還有工作沒有完成,妥善地處理錯誤就尤其重要。這種情況經常會出現在要求用戶提供輸入的程序中;如果程序能夠妥善地處理無效輸入,就能再提示用戶提供有效輸入,而不至于崩潰。
創建一個只執行除法運算的簡單計算器:
print("Give me two numbers, and I'll divide them.") print("Enter 'q' to quit.") while True: first_number = input("\nFirst number: ") if first_number == 'q': break second_number = input("Second number: ") try: answer = int(first_number) / int(second_number) except ZeroDivisionError: print("You can't divide by 0!") else: print(answer)
try-except-else 代碼塊的工作原理大致如下:
Python 嘗試執行 try 代碼塊中的代碼;只有可能引發異常的代碼才需要放在 try 語句中。有時候,有一些僅在 try 代碼塊成功執行時才需要運行的代碼;這些代碼應放在 else 代碼塊中。 except 代碼塊告訴 Python ,如果它嘗試運行 try 代碼塊中的代碼時引發了指定的異常,該怎么辦。
通過預測可能發生錯誤的代碼,可編寫健壯的程序,它們即便面臨無效數據或缺少資源,也能繼續運行,從而能夠抵御無意的用戶錯誤和惡意的攻擊。
處理 FileNotFoundError 異常
FileNotFoundError 錯誤是函數 open() 導致的,因此要處理這個錯誤,必須將 try 語句放在包含 open() 的代碼行之前:
filename = 'alice.txt' try: with open(filename) as f_obj: contents = f_obj.read() except FileNotFoundError: msg = "Sorry, the file " + filename + " does not exist." print(msg)
處理多個文件
def count_words(filename): """ 計算一個文件大致包含多少個單詞 """ try: with open(filename) as f_obj: contents = f_obj.read() except FileNotFoundError: msg = "Sorry, the file " + filename + " does not exist." print(msg) else: # 計算文件大致包含多少個單詞 words = contents.split() num_words = len(words) print("The file " + filename + " has about " + str(num_words) + " words.") filenames = ['a.txt', 'b.txt', 'c.txt', 'd.txt'] for filename in filenames: count_words(filename)
異常時保持靜默
要讓程序在失敗時一聲不吭,可像通常那樣編寫 try 代碼塊,但在 except 代碼塊中明確地告訴 Python 什么都不要做。 Python 有一個 pass 語句,可在代碼塊中使用它來讓 Python 什么都不要做:
def count_words(filename): """ 計算一個文件大致包含多少個單詞 """ try: with open(filename) as f_obj: contents = f_obj.read() except FileNotFoundError: pass
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。