1. 程式人生 > 實用技巧 >Python中錯誤和異常怎麼處理

Python中錯誤和異常怎麼處理

使用python程式設計的時候難免會出現各種各樣的錯誤,這些錯誤會使程式中斷。好在python直譯器會告訴你錯誤發生在什麼位置以及錯誤產生的原因,便於我們進行修改和除錯。有時候我們並不希望這種錯誤中斷程式的執行,於是通過異常處理能夠忽略本次異常讓程式繼續執行下去。


python中會發生兩種型別的錯誤。

1、語法錯誤:如果未遵循正確的語言語法,則會引發語法錯誤。
2、邏輯錯誤(異常):在執行時中,通過語法測試後發生錯誤的情況稱為異常或邏輯型別。

一、語法錯誤

string = 'Hello Word'
if string == 'Hello'
    print('是Hello')

執行結果:

  File "
D:/python/lianxi/add.py", line 15 if string == 'Hello' ^ SyntaxError: invalid syntax

它就返回了語法錯誤的資訊,用小箭頭告訴我們,if語句後面少了一個:(冒號)。

二、邏輯錯誤(異常)

shu = 10
result = shu / 0
print(resule)

執行結果:

Traceback (most recent call last):
  File "D:/python/lianxi/add.py", line 15, in <module>
    result 
= shu / 0 ZeroDivisionError: division by zero

丟擲一個ZeroDivisionError異常,叫處理異常。

三、異常處理

我們可以通過使用 try..except 來處理異常狀況。一般來說我們會把通常的語句放在 try 程式碼塊中,將我們的錯誤處理器程式碼放置在 except 程式碼塊中。

try:        # 嘗試執行以下程式碼
    result = 5 / 2
    print(result)
except:        # 捕獲到異常執行以下程式碼
    print('程式異常')

執行結果:

2.5

如果我們故意寫錯,看是怎麼樣的:

try:        # 嘗試執行以下程式碼
    result = 5 / 0
    print(result)
except:        # 捕獲到異常執行以下程式碼
    print('程式異常')

執行結果:

程式異常

通過上面可以看到,如果沒有出現異常,它只執行try下的程式碼;出現異常,它就運行了except下面的程式碼。

如果知道它報的的是ZeroDivisionError異常的話,那可以這樣寫:

try:
    x = 5 / 0
    print(x)
except ZeroDivisionError:        # 捕獲到ZeroDivisionError的話,執行下面的程式碼
    print('不能除零')
except:                            # 如果是出現其它錯誤的話,那就執行這裡的程式碼
    print('其它錯誤')

執行結果:

不能除零

如果想看捕獲的異常詳細資訊,可以這樣:

try:
    x = 5 / 0
    print(x)
except ZeroDivisionError as ze:        # 捕獲到ZeroDivisionError的話,執行下面的程式碼
    print('出現異常',ze)

執行結果:

出現異常 division by zero

四、try...else語句

try:
    x = 5 / 2
    print(x)
except ZeroDivisionError:        # 捕獲到ZeroDivisionError的話,執行下面的程式碼
    print('不能除零')
except:                            # 如果是出現其它錯誤的話,那就執行這裡的程式碼
    print('其它錯誤')
else:                            # 如果try執行沒有出現異常的話,就再執行else中的程式碼
    print('沒有異常')

執行結果:

2.5
沒有異常

else語句是在try語句中的程式碼沒有任何異常的情況下,再執行else語句下的程式碼。

五、try...finally語句

f = open('data.txt')
try:
    print(f.read())
except:
    print('檔案操作遇到錯誤!')    # 這個時候檔案始終是開啟的,可能後面再讀取的時候就會遇到錯誤,這種情況下我們就適合用finally
finally:                        # 不管上面有沒有出現異常,都要執行finally下的程式碼
    f.close()

執行結果:

檔案操作遇到錯誤!

finally語句就是不管上面有沒有異常,都要執行finally語句下的程式碼,通常是做一些必須要釋放的資源的程式碼,最典型的就是檔案操作和資料庫操作。

六、丟擲異常

def method():
    raise NotImplementedError('該方法程式碼還未實現')
    # 設定這個函式在這,留個位置,要你寫入程式碼,但是可能你沒寫進去,那就設定預設的報錯
method()

執行結果:

Traceback (most recent call last):
  File "D:/python/lianxi/add.py", line 17, in <module>
    method()
  File "D:/python/lianxi/add.py", line 15, in method
    raise NotImplementedError('該方法程式碼還未實現')
NotImplementedError: 該方法程式碼還未實現

raise語句是丟擲一個指定的異常。

本文轉自:https://www.myblou.com/archives/1497