繁体   English   中英

如何在python中捕获copytree的异常

[英]How to catch exceptions of copytree in python

shutil.copytree文档指出:

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

链接是指:

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

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

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

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

文档首先说明

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

除非您指定dirs_exist_ok=True FileExistsError会引发FileExistsError 你是对的,稍后在文档中指出(可能在其他情况下)可能会引发shutil.Error

最后,我认为这是一个解释问题,但如果代码引发FileExistsError您应该捕获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(),[shutil.Error被引发时] 异常参数是一个3 元组(srcname、dstname、异常)的列表。

这并不意味着copytree()期间的所有异常都属于类型shutil.Error

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM