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
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM