假如你在讀一個文件的時候,希望在無論異常發生與否的情況下都關閉文件,該怎么做呢?這
可以使用finally塊來完成。注意,在一個try塊下,你可以同時使用except從句和finally塊。如果
你要同時使用它們的話,需要把一個嵌入另外一個。
#!/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 up
closed 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
它如何工作我們進行通常的讀文件工作,但是我有意在每打印一行之前用time.sleep方法暫停2秒鐘。這樣
做的原因是讓程序運行得慢一些(Python由于其本質通常運行得很快)。在程序運行的時候,
按Ctrl-c中斷/取消程序。
我們可以觀察到KeyboardInterrupt異常被觸發,程序退出。但是在程序退出之前,finally從句仍
然被執行,把文件關閉