在Python中正确实现Shutil.Error

问题描述 投票:3回答:2

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

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

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

example他们这样做:

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

问题:

  1. 如何正确捕获使用shutil.copytree时可能发生的异常(假设我的上述脚本不正确)?
  2. 那么你如何看待发生的错误,我会循环通过errors数组吗?
python-3.x exception-handling directory
2个回答
5
投票

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

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])

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

  1. 不要抓住异常。您的脚本将暂停,并且将打印所有错误信息。
  2. 如果你想让脚本继续下去,那么你真的要求重复this SO question。我会提到这个问题;接受的答案写得很好。

顺便说一下,你应该避免把它称为数组。这个特殊的异常对象有listtuples,而arrays是一个完全不同的数据结构。


0
投票

您可以使用OSError来处理它:

import shutil 

def removeDirectory(directory):
    try:
        shutil.rmtree(directory)
    except OSError as err:
        print(err)

removeDirectory('PathOfDirectoryThatDoesntExist')

输出:

[Errno 2]没有这样的文件或目录:'。/ PathOfDirectoryThatDoesntExist'

© www.soinside.com 2019 - 2024. All rights reserved.