如何在python中不关闭文件对象而导致错误或不需要的行为?(代码示例pls)

2024-03-28 17:48:06 发布

您现在位置:Python中文网/ 问答频道 /正文

Possible Duplicate:
Does a File Object Automatically Close when its Reference Count Hits Zero?

我了解到需要关闭文件对象,但有人能提供一个非常简单的示例(代码示例),其中错误是由于不关闭文件对象造成的吗?你知道吗


Tags: 文件对象示例closeobjectcountfileits
3条回答

您是否在询问如果您无法关闭文件,Python是否会引发错误?那么答案是“不”。你知道吗

如果你问自己是否会丢失数据,答案是“是”。你知道吗

打个比方,如果你把钥匙留在点火开关里,警察会给你开罚单吗?不。 这种做法会增加你“丢”车的几率吗?对。你知道吗

编辑:

好吧,你要的是一个例子,而不是聪明的阿莱克评论。这里是一个例子,虽然有点做作,因为这样做比调查缓冲区大小的情况更容易。你知道吗

好:

fh = open("erase_me.txt", "w")
fh.write("Hello there!")
fh.close()

# Writes "Hello there!" to 'erase_me.txt'
# tcsh-13: cat erase_me.txt
# Hello there!tcsh-14: 

坏:

import os
fh = open("erase_me.txt", "w")
fh.write("Hello there!")

# Whoops!  Something bad happened and my program bombed!
os._exit(1)

fh.close()

# tcsh-19: cat erase_me.txt
# tcsh-20: ll erase_me.txt 
# -rw-r--r-- 1 me us 0 Jul 17 15:41 erase_me.txt
# (Notice file length = 0) 

如果您正在将数据写入一个文件,并且由于该文件没有正确关闭(缓冲区被刷新),最后输出文件没有包含您写入的所有数据,您可能会观察到这种情况。你知道吗

这里有一个关于这个问题的最近的例子Python not writing full string to file。你知道吗

请注意,这个问题不是Python独有的,其他语言也可能遇到这个问题(例如,我在C语言中不止一次遇到过这个问题)

在某些操作系统上,将大量数据写入文件而不关闭文件会导致在libc将其撕下时无法刷新数据,从而导致文件被截断。你知道吗

相关问题 更多 >