2015-04-07 49 views
1

我有以下代碼來執行普通的文本文件的閱讀通告:Python的`with`聲明和文件讀取發電機

def file_reader(filename): 
    with open(filename, 'rb') as f: 
     while True: 
      for line in f: 
       yield line.strip() 
      f.seek(0) 

文件時,如果將用戶按Ctrl+C某處時程序執行關閉我想知道?

+0

相關:[與發電機中的語句一起使用明智嗎?](https://stackoverflow.com/q/29040534) –

回答

0

Python不能關閉文件。它將被關閉,因爲OS會在進程退出時關閉所有打開的文件句柄。

CPython中能夠而且確實,在關機過程中,清理髮電機,但過程並不保證,但盡最大努力將嘗試以清除任何導入模塊中的所有引用,造成引用計數下降到0

發電機對象將可能被清除,並調用其__del__方法,這將反過來調用generator.close(),這將拋出一個異常GeneratorExityield線,這將導致發電機退出和with語句來關閉文件對象。