【问题标题】:Properly Implement Shutil.Error in Python在 Python 中正确实现 Shutil.Error
【发布时间】:2016-02-09 08:24:58
【问题描述】:

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

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

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

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


    【解决方案1】:

    你可以使用 OSError 来处理它:

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

    输出:

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

    【讨论】:

      【解决方案2】:

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

      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 是一个完全不同的数据结构。

      【讨论】:

      • 快速提问,那我如何查看错误,只需遍历错误数组?
      • 您能否告诉我,仅出于我自己的理解,如何实现回溯功能?
      猜你喜欢
      • 2013-02-25
      • 1970-01-01
      • 2017-06-28
      • 2023-03-23
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多