2016-08-14 93 views
0

舉例來說,我有這樣一個功能:如何關閉文件句柄而函數在Python中異常退出?

def example(): 
    fp = open('example.txt','w+') 
    fp.write(str(1/0)) 
    fp.close() 

然後,它會拋出一個異常,因爲1/0沒有定義。但是,我既不能刪除example.txt也不能修改example.txt。但是我有一些Python中的重要數據,所以我不能簡單地殺死Python並重新運行它。

當功能完成時出現異常,我該如何完成打開文件?

如果我們沒有試試,我們該怎麼辦:除了:..?

+1

http://effbot.org/zone/python-with-statement.htm – wwii

回答

2

您可以將其封裝在try /除了處理錯誤並在程序結束之前關閉文件讀取器。

def example(): 
    fp = open('example.txt', 'w+') 
    try: 
     fp.write(str(1/0)) 
    except ZeroDivisionError: 
     fp.close() 
    fp.close() 

編輯:@IanAuld的答案比我的好。最好接受那一個。

+0

其實我的問題是,如果我沒有寫一個try ... except ...結構,我可以關閉這個文件嗎? –

3
with open('example.txt','w+') as fp: 
    try: 
     fp.write(...) 
    except ZeroDivisionError as e: 
     print('there was an error: {}'.format(e)) 

使用with情況管理器通過它打開的任何文件都會一旦他們走出去的範圍被自動關閉。

+0

這是否意味着如果我們沒有放置'try ... except ...',我們不能再關閉文件? –

+0

不,您仍然可以像上一次使用open和close方法一樣使用上下文管理器,只要您確實需要該文件就可以保持打開狀態,並在完成後關閉該文件。 [在這裏閱讀更多](https://www.python.org/dev/peps/pep-0343/) – IanAuld