很多時候為撰寫速度與方便的結果,我們經常會把檔案開啟之後,就忘記關閉它。小小程式也許並不會讓人在意,但是當我們正在開發大型應用程式時,這樣的壞習慣經常會帶來無法預期的結果。

例如以下的 Python 片段就是一個不好的例子,因為它並沒有進行關檔的善後處理:

for line in open("file.txt"):
    print line

因此在Python手冊中也提倡了clean-up的動作,簡單地講,就是必須考慮到某些程式行為如何善後。以開檔為例,善後的動作當然就是關檔。

各位其實能夠善用,try-except-else-finally 的陳述結構來進行善後的動作,除了能養成開發的好習慣之外,也能夠讓所開發出來的程式更加堅固耐用(robust)。

try-except-else-finally 的結構如下:

try:
    # 程式主體
except # 預期可以處理的例外錯誤類型:
    # 例外處理
else:
    # 沒有發生例外或錯誤時的執行區塊
finally:
    # Clean-up Action,例如關檔

上述的結構中,finally 區塊是不管有沒有錯誤或例外產生都會被執行的區塊,因此很適合被使用來進行善後的動作。

最後 Python 手冊中也提到了可以善用 with 來進行開檔、讀檔,以避免忘記進行關檔的動作。

例如:

with open("file.txt") as f:
    for line in f:
        print line

如此一來,上述的 f 變數在離開, with 區塊後,都能夠被自動地結束,以達成 clean-up 的目的。

讓我們一起隨手養成寫 Python 的好習慣,成為一個人人都喜愛的 Python 程式開發者吧!

參考資料:

http://docs.python.org/2/tutorial/errors.html#predefined-clean-up-actions