在Python中正确实现Shutil.Error

Emm*_*een 5 directory exception-handling python-3.x

我正在学习Python 3,并尝试编写一个将复制目录的脚本。我正在使用shutil.copytree。从Python文档中说:

如果发生异常,则会引发错误并列出原因。

此异常收集在多文件操作期间引发的异常。对于copytree(),exception参数是一个三元组的列表(srcname,dstname,exception)。

示例中,他们这样做:

 except Error as err:
            errors.extend(err.args[0])
Run Code Online (Sandbox Code Playgroud)

这是我的脚本:

def copyDirectory(src, dest):

    errors = []

    try:
        shutil.copytree(src, dest)
     except Error as err:
            errors.extend(err.args[0])

source="C:/Users/MrRobot/Desktop/Copy"      
destination="C:/Users/MrRobot/Desktop/Destination"

copyDirectory(source, destination)
moveDirectory(destination,"I:/")
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 您如何正确捕获使用时可能发生的异常shutil.copytree(假设以上脚本不正确)?

  2. 那您如何查看发生的错误,我将遍历整个errors阵列?

skr*_*sme 5

捕获异常时,您需要包括模块名称:

except shutil.Error as err:
Run Code Online (Sandbox Code Playgroud)

或显式导入:

from shutil import copytree, Error

# the rest of your code...

try:
    copytree(src, dest)
 except Error as err:
        errors.extend(err.args[0])
Run Code Online (Sandbox Code Playgroud)

要查看回溯和异常信息,您有几种选择:

  1. 不要抓住例外。您的脚本将被暂停,所有错误信息将被打印。

  2. 如果您希望脚本继续执行,那么您实际上是在问这个SO问题的重复项。我会提到这个问题;接受的答案写得很好。

顺便说一句,您应该避免将其称为数组。这个特定异常对象具有列表元组,和阵列是一个完全不同的数据结构。