之前的文章我們簡單介紹了一下 Python 的面向對象,本篇文章我們來看一下 Python 中異常處理。
我們在寫程序時,有可能會出現程序報錯,但是我們想繞過這個錯誤執行操作。即使我們的程序寫的沒問題,但是在運行時也可能會出錯,這是我們就需要將異常拋出來解決,如下代碼:
1 print(name) 2 print("1111")
在上面的代碼中,我們想打印輸出 name 值,但是我們並沒有提前聲明該變量,所以程序會拋出異常,但我們並不想讓程序報錯,可以如下解決:
1 try: 2 print(name) 3 except NameError: 4 print("發生了異常") # 發生了異常 5 print("1111") # 1111
根據上面的代碼不難發現,我們可以使用 try except 語法來跳過這個異常執行接下來的代碼。
異常處理的詳細寫法如下:
1 try: 2 print("123") 3 except (NameError,FileExistsError): 4 print(NameError,FileExistsError) 5 print("如果捕獲到異常后做的處理") 6 except Exception as ret: 7 print("如果用了 Exception,那么意味着只要上面的 except 沒有捕獲到異常,這個 except 一定會捕獲到") 8 print(ret) 9 else: 10 print("沒有異常才會執行的功能") 11 finally: 12 print("無論有沒有異常都執行") 13 14 print("1111") 15 16 ''' 17 123 18 沒有異常才會執行的功能 19 無論有沒有異常都執行 20 1111 21 '''
從上面的輸出結果我們可以看出,當程序沒有錯誤正常執行時,程序執行了 else,finally 兩個異常處理。
1 try: 2 print(name) 3 except (NameError,FileExistsError): 4 print(NameError,FileExistsError) 5 print("如果捕獲到異常后做的處理") 6 except Exception as ret: 7 print("如果用了 Exception,那么意味着只要上面的 except 沒有捕獲到異常,這個 except 一定會捕獲到") 8 print(ret) 9 else: 10 print("沒有異常才會執行的功能") 11 finally: 12 print("無論有沒有異常都執行") 13 14 print("1111") 15 16 ''' 17 <class 'NameError'> <class 'FileExistsError'> 18 如果捕獲到異常后做的處理 19 無論有沒有異常都執行 20 1111 21 '''
從上面的輸出結果我們可以看出,如果程序報錯且第一個 except 捕獲到異常,程序執行了第一個 except,finally 兩個異常處理。
1 try: 2 1/0 3 except (NameError,FileExistsError): 4 print(NameError,FileExistsError) 5 print("如果捕獲到異常后做的處理") 6 except Exception as ret: 7 print("如果用了 Exception,那么意味着只要上面的 except 沒有捕獲到異常,這個 except 一定會捕獲到") 8 print(ret) 9 else: 10 print("沒有異常才會執行的功能") 11 finally: 12 print("無論有沒有異常都執行") 13 14 print("1111") 15 16 ''' 17 如果用了 Exception,那么意味着只要上面的 except 沒有捕獲到異常,這個 except 一定會捕獲到 18 division by zero 19 無論有沒有異常都執行 20 1111 21 '''
從上面的輸出結果我們可以看出,如果程序報錯且第二個 except 捕獲到異常,程序執行了第二個 except,finally 兩個異常處理。
在編寫程序中,我們不可避免地會使用拋出異常來處理我們的程序使其能正常運行,但是我們應盡量少的使用跑出異常。