Python 如何捕获其他模块的自定义错误

Python 如何捕获其他模块的自定义错误

要把一个目录下的一些文件移到另一个目录,要提取的文件名在 file_names 这个List内,而 file_dirs 则是一个存储着文件名:文件地址的 dict,导入shutil 来操作:

for name in file_names:

try:

shutil.move(file_dirs[name], dst)

except KeyError:

continue

整体上工作的很好,只是 file_names 存在一些重复的文件名,遇到重名的就会触发Error

~\Anaconda3\lib\shutil.py in move(src, dst, copy_function)

559 real_dst = os.path.join(dst, _basename(src))

560 if os.path.exists(real_dst):

--> 561 raise Error("Destination path '%s' already exists" % real_dst)

562 try:

563 os.rename(src, real_dst)

Error: Destination path 'D:/***/1331430.jpg' already exists

一开始,我以为直接将Error 放到 cxcept内处理就行,结果遇到重复的还是会触发这个Error:

for name in file_names:

try:

shutil.move(file_dirs[name], dst)

except KeyError:

continue

except Error:

continue

于是打开 shutil.py,发现引发的这个 Errorshutil模块继承OSError后自定义的一个错误,所以更改代码如下:

for name in file_names:

try:

shutil.move(file_dirs[name], dst)

except KeyError:

continue

except OSError:

continue

结果还是不行,仍然会触发Error,请问我该如何捕获这个错误?


回答:

既然这个 Error 是 shutil 包里面的,当然是 except shutil.Error


回答:

我猜楼主改过代码运行后没有仔细看报出得异常是否还是那个shutil.py 561 行抛出的异常。
比方说源文件不存在也会有异常,但不是shutil抛的,python2会报 IOErrorpython3会报FileNotFoundError

以上是 Python 如何捕获其他模块的自定义错误 的全部内容, 来源链接: utcz.com/p/937717.html

回到顶部