Properly Implement Shutil.Error in Python
我正在学习python 3并尝试编写一个脚本来复制一个目录。我用的是
If exception(s) occur, an Error is raised with a list of reasons.
This exception collects exceptions that are raised during a multi-file
operation. For copytree(), the exception argument is a list of
3-tuples (srcname, dstname, exception).
在示例中,他们这样做:
1 2 | except Error as err: errors.extend(err.args[0]) |
这是我的剧本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 | except shutil.Error as err: |
或者直接导入:
1 2 3 4 5 6 7 8 | from shutil import copytree, Error # the rest of your code... try: copytree(src, dest) except Error as err: errors.extend(err.args[0]) |
要查看回溯和异常信息,您有几个选项:
不要抓住例外。您的脚本将停止,所有错误信息将被打印出来。
如果您希望脚本继续,那么您实际上是在问这个so问题的副本。我会提到那个问题;被接受的答案写得很好。
顺便说一下,您应该避免将其称为数组。这个特殊的异常对象有一个元组列表,数组是一个完全不同的数据结构。
您可以使用oserror来处理它:
1 2 3 4 5 6 7 8 9 | import shutil def removeDirectory(directory): try: shutil.rmtree(directory) except OSError as err: print(err) removeDirectory('PathOfDirectoryThatDoesntExist') |
输出:
[Errno 2] No such file or directory:
'./PathOfDirectoryThatDoesntExist'