2014-01-24 136 views

回答

3

這是更好地關閉文件,當你用它做,因爲這是一個很好習慣,但並不完整因爲垃圾回收器會爲你關閉文件。你手動關閉它的原因是有更多的控制權。你不知道什麼時候垃圾收集器會運行。

但更好的是使用python 2.5中引入的with語句。

with open(f_name) as f: 
    # do stuff with f 
    # possibly throw an exception 

這將關閉文件,無論在with語句的範圍內發生了什麼。

1

是的,最好是在處理文件時手動關閉文件或更好地使用with語句(即使發生異常,它也會自動關閉文件)。在CPython中,當垃圾收集器實際上銷燬文件對象時,未引用的文件對象對象將自動關閉,直到此時任何未刷新的數據/資源仍可能在內存中停留。

docs

它與文件打交道 對象時使用的關鍵字很好的做法。這具有如下優點:在 其套件結束後,即使在路上引發異常,該文件也能正確關閉。


相關:

1
$ cat /proc/sys/fs/file-max 
390957 

這可能會打破我的系統(原諒我沒有嘗試:)):

fs = [] 
for i in range(390957+1): 
    fs.append(open(str(i), 'w')) 
for f in files: 
    f.close() 

這個(希望)不會:

for i in range(390957+1): 
    with open(str(i), 'w') as f: 
     # do stuff 
相關問題