Python中錯誤和異常怎麼處理
阿新 • • 發佈:2020-12-19
使用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