可以在try / except语句中使用带有onerror函数的rmtree命令吗?

时间:2016-11-18 05:19:03

标签: python shutil try-except onerror

在使用{/ 1>}命令一个try / except语句中时,我一直在尝试找到有关如何处理错误处理和传播的答案。我试图找到一个展示这种做法的例子,但一直找不到。所以,我想知道它是否可能。在阅读命令here的文档时,我看到它指出:

  

...删除某些文件所在的Windows上的目录树   他们的只读位集。它使用onerror回调来清除   readonly bit并重新尝试删除。任何后续的失败都会   传播。

这是不是这意味着如果在初始尝试执行shutil.rmtree函数后,在{/ 1}}函数内发生错误,换句话说就是{{ 1}}函数没有修复错误,它发生在onerror再次尝试运行时,错误将在主例程中引发(try / except语句在哪里)?这是什么意思"任何后续的失败都会传播"?

我试图确保如果由于某种原因导致任何onerror命令失败,将会捕获失败并且代码仍将继续。我有另一个脚本在此脚本之后运行以批量检查/更正错误,这就是我没有直接处理错误的原因。我只需要确保这个脚本一直运行。下面的代码是否会在编写时完成此操作,或者我需要更改哪些内容才能实现此目的?

onerror

1 个答案:

答案 0 :(得分:1)

documentation表示由onerror引发的异常将不会被捕获,因此您必须自己处理它。

就示例代码而言,空白except通常设计不佳。特别是,它也会捕获KeyboardInterrupt,这肯定不是你的意图。

相反,像这样:

for f in ["Q:/FolderToRemove1", "Q:/FolderToRemove2", 
          "Q:/FolderToRemove3", "Q:/FolderToRemove4", 
          "Q:/FolderToRemove5", "C:/Users/mhill/Desktop/screenshots"]:
    try:
        shutil.rmtree(f, onerror=remove_readonly)
    except Exception:
        pass