Python 检查文件是否针对任何文件类型打开

Python 检查文件是否针对任何文件类型打开,python,Python,Python文件类型文档将File.closed作为 bool指示文件对象的当前状态。这是一个只读属性;close()方法更改值。它可能不适用于所有类似文件的对象 鉴于不能保证它在所有类似文件的对象上都可用,在尝试重新打开文件之前,是否有另一种(更好的?)方法来检查我是否已经打开了文件 由open返回的所有文件对象都具有closed属性 类文件对象是实现与文件相同接口的对象(例如),您引用的文档表明,实现此类接口不需要关闭属性 这些注释到处都是关于应该在哪个文件类对象中实现哪些方法的。关于属性,

Python文件类型文档将
File.closed
作为

bool指示文件对象的当前状态。这是一个只读属性;
close()
方法更改值。它可能不适用于所有类似文件的对象


鉴于不能保证它在所有类似文件的对象上都可用,在尝试重新打开文件之前,是否有另一种(更好的?)方法来检查我是否已经打开了文件

open
返回的所有文件对象都具有
closed
属性

类文件对象是实现与
文件
相同接口的对象(例如),您引用的文档表明,实现此类接口不需要
关闭
属性

这些注释到处都是关于应该在哪个文件类对象中实现哪些方法的。关于属性,他们也有这样的说法:

文件对象还提供许多其他有趣的属性。这些对于类似文件的对象不是必需的,但是如果它们对特定对象有意义,则应该实现它们

由于close方法的文档声明“任何需要打开文件的操作都会引发ValueError”,因此检查类似文件的对象是否已关闭的最佳方法是简单地将文件当作已打开使用,如果未打开,则捕获
ValueError

try:
    mystr = f.read(42)
except ValueError:
    # f was closed, do whatever needs doing
并非所有类似文件的对象都是可搜索的,因此执行测试读取以检查对象是否已关闭(正如我开始建议的那样)是一个坏主意。这是因为,为了防止文件被打开,您需要存储您所读取的内容,然后在实际读取时以某种方式将其预处理。最好简单地假设它是打开的,并立即执行您想执行的任何操作,然后在except子句中处理关闭的文件


正如评论中所指出的,不能像object那样简单地重新打开一个关闭的文件。在
StringIO
示例中,关闭实际上会删除缓冲区,因此类似文件的对象不再像关闭前那样具有“重新打开”自身所需的信息。

只是为了澄清@lazyr已经说过的话:文档指的是类似文件的对象。实际文件对象将始终具有
closed
属性,您可以使用该属性查看文件是否已关闭。

。。。通常不会像这样“重新打开”文件;通常只需重新创建对象。@IgnacioVazquez Abrams我有一段时间没有执行文件IO了。为什么我不想保留该对象而关闭该文件?文件类通常不用于一开始就可以关闭的文件。这就是我经常指责你没有回答这个问题的地方,但我不确定这个问题是否有一个正确的答案开始…@Ignacio我会尝试回答这个问题,等等。