異常處理是工作中編寫**必須要完成的內容,對於不符合預期的操作,程式總會出現異常情況,而對異常情況能夠妥善處理,是保證程式穩定性的關鍵。
>>> f = input("filename")
filename/hone/a.py
>>> ff = open(f)
traceback (most recent call last):
file "", line 1, in
filenotfounderror: [errno 2] no such file or
directory:
'/hone/a.py'
以上**,使用者輸入的檔案不存,系統丟擲檔案不存在的異常,型別是filenotfounderror。
python異常型別有很多,常見的型別如下:
異常處理
如果出現了異常,我們不可以直接將異常拋給使用者,應該使用python的異常處理方法來捕獲並處理異常,處理方法為try,except,finally三個關鍵字。
try:
有可能丟擲異常的**
except 異常型別名稱:
處理**
except 異常型別名稱:
處理**
except可以有多個,每個處理不同型別的異常,也可以不寫任何異常型別名稱,則會處理所有捕獲的異常。
以上**使用異常處理改進:
>>> filename = input('filename')
filename/home/a.py
>>>
try:
... f = open(filename)
... print(f.read)
... f.close()
...
except filenotfounderror:
... print('file not found')
...
file not found
finally關鍵字是用來進行清理工作,經常和except一起使用,即無論是正常還是異常,finally塊裡面的**都會執行。
如果乙個檔案處理的程式中異常出現在 f.write() 向檔案中寫入資料的時候,就無法執行 close 操作,使用 finally 可以保證無論 try **塊中的**是否丟擲異常,都能夠執行 finally **塊裡的內容,保證檔案被正常關閉。
修改上述的程式如下,改為寫入操作,引入 finally 保證檔案可以被正常關閉:
filename = '/etc/protocols'
f = open(filename)
try:
f.write('shiyanlou')
except:
print("file write error")
finally:
print("finally")
f.close()
程式執行的結果:
file write error
finally
表示雖然異常,但仍然執行到了 finally **塊。
這裡需要說明下丟擲異常的原因是以唯讀的模式開啟了乙個檔案,但嘗試向檔案中寫入內容,所以會丟擲異常。另外 except: 這個語句後不寫任何引數,表示將處理所有 try **塊中丟擲的異常。
丟擲異常
如果我們希望在程式執行過程中丟擲一些異常,該如何操作呢?可以使用 raise 語句。
raise 異常名稱
例如,我們在**裡希望丟擲乙個 valueerror,直接使用:
raise valueerror()
外部的**就可以使用 except valueerror 進行捕獲和處理了。
Python學習筆記(七) 異常處理
異常處理部分,只是很粗略的看了一遍。著重記錄try except塊,和if else類似,不過try是異常控制的,一旦發生異常,跳過其他未執行的語句,直接執行except塊中的內容。知道捕獲多種異常的方法,分別處理不同異常的方法,捕獲所有異常的方法。finally語句 無論程式是否發生異常,fina...
Python學習筆記 七 異常處理
這篇文章將會介紹 python 中異常及其處理方法 異常是一種非正常狀態,它表示程式在執行過程中發生錯誤 在實際情況中,可能會有多種原因導致程式出現異常狀態,而每種異常狀態都會由乙個異常物件表示 當程式出現異常狀態時,會丟擲乙個異常物件,如果該物件未 獲和處理,程式將會中止 在一般情況下,程式設計師...
python學習筆記 七 異常
3.自定義異常 4.警告 在實際開發中,往往不會出現乙個系統編寫下來,沒有出現任何乙個bug。為處理這種會出現錯誤的地方,如除數為零的除法,python提供了非常強大的機制 異常處理機制。python使用異常物件來表示程式異常狀態,並在遇到錯誤時引發異常。異常物件未被處理 或捕獲 是,程式將終止執行...