假如你在讀一個(gè)文件的時(shí)候,希望在無(wú)論異常發(fā)生與否的情況下都關(guān)閉文件,該怎么做呢?這
可以使用finally塊來(lái)完成。注意,在一個(gè)try塊下,你可以同時(shí)使用except從句和finally塊。如果
你要同時(shí)使用它們的話,需要把一個(gè)嵌入另外一個(gè)。
#!/usr/bin/python
#
 Filename: finally.py
import time
try:
    f 
= file('poem.txt')
    
while True: # our usual file-reading idiom
        line = f.readline()
        
if len(line) == 0:
            
break
        time.sleep(
2)
        
print line,
finally:
    f.close()
    
print 'Cleaning upclosed the file' 
輸出
$ python finally.py
Programming is fun
When the work is done
Cleaning up...closed the file
Traceback (most recent call last):
  File "finally.py", line 12, in ?
    time.sleep(2)
KeyboardInterrupt

它如何工作
我們進(jìn)行通常的讀文件工作,但是我有意在每打印一行之前用time.sleep方法暫停2秒鐘。這樣
做的原因是讓程序運(yùn)行得慢一些(Python由于其本質(zhì)通常運(yùn)行得很快)。在程序運(yùn)行的時(shí)候,
按Ctrl-c中斷/取消程序。
我們可以觀察到KeyboardInterrupt異常被觸發(fā),程序退出。但是在程序退出之前,finally從句仍
然被執(zhí)行,把文件關(guān)閉