如何在函数退出时关闭文件句柄,Python中有异常?

时间:2016-08-14 19:43:52

标签: python

例如,我有一个像:

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

然后它将抛出异常,因为未定义1/0。但是,我既不能删除example.txt也不能修改example.txt。但我在Python中有一些重要的数据,所以我不能简单地杀死Python并再次运行它。

如果函数以异常结束,我怎么能完成打开文件。

如果我们没有尝试,我们该怎么办:..除了:?

2 个答案:

答案 0 :(得分:3)

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

使用with上下文管理器,一旦它们超出范围,它们打开的任何文件都将自动关闭。

答案 1 :(得分:2)

您可以将其包装在try / except中以处理错误并在程序结束前关闭文件阅读器。

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

编辑:@IanAuld的答案比我的好。最好接受那个。