我有一些我需要更新的目录我正在使用以下代码
for newdir in newdirs:
olddir = newdir.replace('h:\\','G:\\').replace('_academic','')
shutil.rmtree(newdir)
shutil.copytree(olddir,newdir)
我偶尔会收到错误
WindowsError: [Error 5] Access is denied: 'h:\\mydir\\sub1\\sub2\\sub3\\sub4\\sub5'
因为错误不会发生在以前的目录上我决定原因必须是一些访问冲突 - 在rmtree调用和copytree之间发生的时间太少所以我修改了代码以浪费一些时间
for newdir in newdirs:
olddir = newdir.replace('h:\\','G:\\').replace('_academic','')
shutil.rmtree(newdir)
for item in range(0,20,1):
pass
shutil.copytree(olddir,newdir)
这使错误消失,旧目录被复制到新位置。
我不喜欢这个,因为它看起来很摇摇欲坠 - 即使对我来说也是如此。
答案 0 :(得分:5)
如果等待时错误消失,你可能没有错。所以跟进等待的想法,但是有目的地等待,这可能有点更好:
for newdir in newdirs:
olddir = newdir.replace('h:\\','G:\\').replace('_academic','')
shutil.rmtree(newdir)
while os.path.exists(newdir): # check if it exists
pass
shutil.copytree(olddir,newdir)
如果发生一些奇怪的错误导致目录被删除但没有引发异常,while
循环理论上可能会永远存在,但我发现这种情况极不可能。
我并不为这个解决方案而感到骄傲,但除了新知识之外,这应该比任意延迟更加傻瓜。