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

在Python中,当函数异常退出时,如何关闭文件句柄?,python,Python,例如,我有一个函数,如: def example(): fp = open('example.txt','w+') fp.write(str(1/0)) fp.close() 然后它将抛出异常,因为未定义1/0。但是,我既不能删除example.txt,也不能修改example.txt。但是我在Python中有一些重要的数据,所以我不能简单地杀死Python并再次运行它 当函数在异常情况下完成时,如何完成文件的打开 如果我们不试一试,我们该怎么办:。。除了您可以将其包装

例如,我有一个函数,如:

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

当函数在异常情况下完成时,如何完成文件的打开


如果我们不试一试,我们该怎么办:。。除了

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

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

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

您可以在try/except中包装它,以处理错误并在程序结束前关闭文件读取器

def example():
    fp = open('example.txt', 'w+')
    try:
        fp.write(str(1/0))
    except ZeroDivisionError:
        fp.close()
    fp.close()
with open('example.txt','w+') as fp:
    try:
        fp.write(...)
    except ZeroDivisionError as e:
        print('there was an error: {}'.format(e))
编辑:由@ianault给出的答案比我的好。最好接受这一点

with open('example.txt','w+') as fp:
    try:
        fp.write(...)
    except ZeroDivisionError as e:
        print('there was an error: {}'.format(e))
使用带有上下文管理器的
,它打开的任何文件一旦超出范围将自动关闭


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

这是否意味着,如果我们没有放置
try…except…
,我们将无法再关闭该文件?不,您仍然可以使用与以前相同的打开和关闭方式,上下文管理器只需确保该文件在您需要时保持打开状态,并在完成后关闭它。这是否意味着,如果我们没有放置
try…except…
,我们将无法再关闭该文件?不,您仍然可以使用与以前相同的打开和关闭方式,上下文管理器只需确保该文件在您需要时保持打开状态,并在完成后关闭它。事实上,我的问题是,如果我没有写一篇文章,除了。。。结构,我可以关闭文件吗?实际上我的问题是,如果我不写一个尝试…除了。。。结构,我可以关闭文件吗?