1. 程式人生 > >python錯誤和異常處理

python錯誤和異常處理

前言

異常處理是為了讓程式更加健壯,讓程式面對一下非法輸入或者“呆子”有一定應對能力。python的異常處理跟java很像,java中把異常粗略劃分為錯誤和執行異常。在這裡統一叫Error

常見的錯誤

這裡只列舉常見的,更快的明白python異常處理邏輯才比較重要。

NameError

這是比較常見的一個錯誤,就是沒有定義變數就把它拿來用。
image.png

SyntaxError

這是語法錯誤,少了個冒號啊,沒有空格啊,都會出現這個錯誤。
image.png

IO Error

在做檔案操作的時候常遇到的錯誤,這裡介紹一下FileNotFoundError 就是做檔案操作的時候檔案不存在。在下面的例子我們會拿IO Error 做描述。因為這是最常見最典型的”執行時異常“。

image.png

ZeroDivisionError

在做資料處理和計算的時候會遇到這種錯誤就是除數是 0。
image.png

ValueError

數值錯誤,一般就是數值運算的時候發生的錯誤,這個錯誤也不是特別好避免。
image.png

IndentationError

這是新手常遇到的一種錯誤,就是縮排問題啦。
image.png

處理

上述的異常(錯誤)python的直譯器都可以 捕獲。不過等它捕獲到了我們的 程式也就結束了。所以我們要在python直譯器之前用自己的程式碼捕獲這些異常處理掉,從而讓自己的程式碼能夠有效的按照我們理想的方向執行下去。

try-except

python中最基本的處理異常的語句塊,相當於java中的try-catch.
基本語法格式

try:
    # 執行語句快
    pass
except : #異常名字
    pass 
    # 處理異常

基本邏輯就是 讓可能產生異常的程式碼正常的在try中執行。用except 去捕獲異常,所以except 後面寫的是異常的名稱。如果捕獲到了該異常那麼就在下面的語句塊去處理異常。

實際例子

try:
    j
except NameError as e:
    print("catch Error")
print("順利到這")

由上一個小結知道不定義j使用j會產生一個NameError 。如果直接寫程式會提前結束,python直譯器就會捕獲到異常並且丟擲。我們這裡可以手動捕獲,處理之後可以順利到下文!

注意
無論是python 的try-except,還是java的try-catch都只能捕獲執行時異常。如果程式碼本身就是錯的根本就不能執行更別談怎麼捕獲異常。

##try-except-else
如果有java基礎的同學就知道try裡面不能寫一坨東西,還有就是不能瘋狂的使用try-except。為了避免try語句塊過長。弄了個try-except-else
基本語法

try:
    pass
except:
    pass
else:
    #沒有錯誤可以去做別的事情
    pass

那麼try裡面就可以只寫可能出錯的語句,讓程式更加精簡。

try-finally

try:
    pass
finally:
    #如果沒有捕獲到異常。程式碼執行。
    #如果捕獲到異常,先執行這個,然後丟給直譯器進行處理異常。
    #總之就是無論如何都會做這個操作。
    pass

先看一個沒有異常的例子

#1.txt裡面的內容是print
try:
    f=open('1.txt')
    print(f.read())
finally:
    print("finally")

image.png
執行完了try立馬會執行finally

如果發生異常finally也會執行

try:
    f=open('12.txt')
    print(f.read())
finally:
    print("finally")

image.png

try-except-finally

加一個異常處理

try:
    pass
except:
    #處理異常
    pass
finally:
    #必須做的事
    pass

#1、如果try 沒有捕獲到異常,執行finally語句。
#2、如果捕獲到了異常先處理異常,然後執行finally

例子

try:
    f
except NameError as e:
    print("catch error")
finally:
    print("必須做的事")

image.png

try-except-else-finally

終極大合體。。