Python中检查ZipFile对象是否已关闭的最佳方法是什么?如何检查zipfile是否已关闭
因为我在一类这样的时刻:
try:
self.zf.open(archive_name).close()
except RuntimeError:
self.zf = zipfile.ZipFile(self.path)
with self.zf.open(archive_name) as f:
# do stuff...
有没有更好的办法?
Python中检查ZipFile对象是否已关闭的最佳方法是什么?如何检查zipfile是否已关闭
因为我在一类这样的时刻:
try:
self.zf.open(archive_name).close()
except RuntimeError:
self.zf = zipfile.ZipFile(self.path)
with self.zf.open(archive_name) as f:
# do stuff...
有没有更好的办法?
在内部,有一个打开的文件指针,称为fp
,get的清除关闭;您可以测试该自己太:
if not self.zf.fp:
self.zf = zipfile.ZipFile(self.path)
见zipfile
module source;如果not self.fp
为真,open
方法将引发RuntimeError
异常。
请注意,依赖这样的内部的,未公开的实现可能是毛茸茸的;如果将来的实现改变了你的代码,可能会以微妙的方式破坏。确保您的项目具有良好的测试覆盖率。
或者,你可以创建一个ZipFile的子类并覆盖.close
的方法来跟踪状态,这将打破由于内部变化的风险少:
class MyZipFile(zipfile.ZipFile):
closed = False
def close(self):
self.closed = True
super(MyZipFile, self).close()
和
if self.zf.closed:
self.zf = MyZipFile(self.path)
感谢aknuds1的建议。
你是什么意思“已经”?什么时候该文件可以由谁关闭? – 2012-08-10 08:22:01