try: # 可能出現異常的語句finally: # 無論是否發生異常都會執行的語句其中,finally語句塊用於清理在try塊中執行的操作,如釋放其佔有的資源(如文件對象、資料庫連接、圖形句柄等)。接下來演示try-finally語句的用法,如下所示:
try: f=open('test.txt','a+') i=1while True: str=input('請輸入第%d行字符串(按Q結束):'%i)if str.upper()=='Q':break f.write(str + '\n') i += 1 except KeyboardInterrupt: print('程序中斷!(Ctrl+C)') finally: f.close() print('文件關閉')print('程序結束')打開控制臺(按Window+R組合鍵打開運行窗口,在輸入框中輸入cmd並單擊「確定」按鈕),在命令行模式下進入D:\1000phone目錄,輸入「python13-8.py」,開始執行程序,如下圖所示。當提示輸入第3行字符串時,在鍵盤中按下Ctrl+C鍵,此時引發KeyboardInterrupt 異常,程序立即執行except語句,之後再執行finally語句。另外,with-as語句可作為try-finally語句處理異常的替代,其語法格式如下:
with 表達式 [as變量名]:with 語句塊該語句用於定義一個有終止或清理行為的情況,如釋放線程資源、文件、資料庫連接等,在這些場合下使用with語句將使代碼更加簡潔。在講解文件打開與關閉時,本書使用的就是with-as語句。with後面的表達式的結果將生成一個支持環境管理協議的對象,該對象中定義了__enter__()和__exit__()方法。在with內部的語句塊執行之前,調用__enter__()方法運行構造代碼,如果在as後面指定了一個變量,則將返回值和這個變量名綁定。當with內部語句塊執行結束後,自動調用__exit__()方法,同時執行必要的清理工作,不管執行過程中有無異常發生。以上學習了try-except語句、try-except-else語句和try-finally語句,在實際開發中,經常需要將3種語句結合起來使用,具體如下所示:try: #可能出現異常的語句except異常類名as異常對象名: #處理特定異常的語句except: #處理多個異常的語句else: #未捕獲到異常執行的語句finally: #無論是否發生異常都會執行的語句程序先執行try語句塊,若try語句塊中的某一語句執行時發生異常,則程序跳轉到except語句,從上到下判斷拋出的異常是否與except後面的異常類相匹配,並執行第一個匹配該異常的except後面的語句塊。若try語句塊中發生了異常,但是沒有找到匹配的異常類,則執行不帶任何匹配類型的except語句塊。若沒有發生任何異常,則程序在執行完try語句塊後直接進入else語句塊。最後,無論程序是否發生異常,都會執行finally語句塊。此教程來源於《Python基礎入門》書籍,想要自學Python的同學可以參考千鋒原創書籍《Python基礎入門》,知識點詳盡,案例豐富,可幫助入門級使用。