删除文件时出错

时间:2016-12-07 09:15:54

标签: python windows python-3.x

import gc
import os

gc.disable()

open('tmp.txt', 'w').close()

class A:
    def __init__(self):
        self.fo = open('tmp.txt')

a = A()

os.remove('tmp.txt')

当我执行脚本时,我得到了PermissionError: [WinError 32]。然后我尝试了这个:

import gc
import os

gc.disable()

open('tmp.txt', 'w').close()

class A:
    def __init__(self):
        self.fo = open('tmp.txt')

a = A()

# or a = None
del a

os.remove('tmp.txt')

虽然这次成功了,但我不知道原因。你能告诉我为什么吗?

我的python版本是3.5.2。

1 个答案:

答案 0 :(得分:2)

在Windows上,如果某个程序有句柄,则无法删除文件。

删除实例时,手动/强制垃圾收集句柄(因为没有其他对象在del a 上有引用),并关闭文件,这说明它有效。

另见how to release used memory immediately in python list?,其中解释了

a = None

a
如果没有其他对象拥有对它的引用,

立即释放{{1}}的内存。