首页 > 解决方案 > 如何在python中捕获copytree的异常

问题描述

国家的文件shutil.copytree

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

链接指的是:

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

这是什么shutil.Error异常?我试图捕捉这种类型的异常:

try:
  shutil.copytree(source, dest) # this throws a FileExistsError for example
except shutil.Error:
    # error handling

但是没有提出这种错误..

标签: python

解决方案


文档首先说明

dirs_exist_ok指示在 dst 或任何缺少的父目录已经存在的情况下是否引发异常。

除非你指定dirs_exist_ok=TrueaFileExistsError被提出。您是对的,稍后在文档中指出(可能在其他情况下)shutil.Error可能会提出 a 。

最后我认为这是一个解释问题,但如果代码引发 aFileExistsError你应该抓住 a FileExistsError

try:
  shutil.copytree(source, dest)
except FileExistsError:
    # error handling
>>> shutil.copytree("ws", "workshop")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/robin/.pyenv/versions/3.8.6/lib/python3.8/shutil.py", line 554, in copytree
    return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks,
  File "/home/robin/.pyenv/versions/3.8.6/lib/python3.8/shutil.py", line 455, in _copytree
    os.makedirs(dst, exist_ok=dirs_exist_ok)
  File "/home/robin/.pyenv/versions/3.8.6/lib/python3.8/os.py", line 223, in makedirs
    mkdir(name, mode)
FileExistsError: [Errno 17] File exists: 'workshop'
>>> shutil.copytree("ws", "workshop", dirs_exist_ok=True)
'workshop'

您引用的部分shutil.Error可以解释为:

此异常收集在多文件操作期间引发的异常。对于 copytree(),[当 ashutil.Error被引发] 异常参数是 3 元组(srcname、dstname、异常)的列表。

这并不意味着所有异常 duringcopytree()都将是 type shutil.Error


推荐阅读