Python 3.x 在Python中正确实现Shutil.Error

Python 3.x 在Python中正确实现Shutil.Error,python-3.x,exception-handling,directory,Python 3.x,Exception Handling,Directory,我正在学习Python3,并试图编写一个脚本来复制目录。我正在使用shutil.copytree。从Python文档中可以看出: 如果发生异常,则会引发错误并列出原因 此异常收集在多文件存储期间引发的异常 活动对于copytree(),异常参数是 三元组(srcname、dstname、exception) 在这种情况下,他们会这样做: except Error as err: errors.extend(err.args[0]) 这是我的剧本: def copyDi

我正在学习Python3,并试图编写一个脚本来复制目录。我正在使用
shutil.copytree
。从Python文档中可以看出:

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

此异常收集在多文件存储期间引发的异常 活动对于copytree(),异常参数是 三元组(srcname、dstname、exception)

在这种情况下,他们会这样做:

 except Error as err:
            errors.extend(err.args[0])
这是我的剧本:

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:/")
问题:

  • 如何正确捕获使用
    shutil.copytree
    时可能发生的异常(假设我上面的脚本不正确)

  • 那么,您将如何查看发生的错误,我是否将循环查看
    errors
    数组


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

    except shutil.Error as err:
    
    或者显式导入它:

    from shutil import copytree, Error
    
    # the rest of your code...
    
    try:
        copytree(src, dest)
     except Error as err:
            errors.extend(err.args[0])
    
    要查看回溯和异常信息,您有几个选项:

  • 不要捕捉异常。您的脚本将被暂停,所有错误信息将被打印

  • 如果您希望脚本继续,那么您实际上是在请求脚本的副本。我想提及这个问题;被接受的答案写得很好


  • 顺便说一下,您应该避免将其称为数组。此特定异常对象具有of,并且是完全不同的数据结构。

    您可以使用OSError来处理它:

    import shutil 
    
    def removeDirectory(directory):
        try:
            shutil.rmtree(directory)
        except OSError as err:
            print(err)
    
    removeDirectory('PathOfDirectoryThatDoesntExist')
    
    输出:

    [Errno 2]没有这样的文件或目录: “./pathofDirectorythatDoesnTextist”


    快速提问,然后我如何查看错误,只是循环错误数组?为了我自己的理解,你能告诉我如何实现回溯功能吗?