我试图重命名一个文件,但是如果文件名已经存在,就继续前进。脚本终止时引发了FileExistsError异常,尽管我想我是在告诉它要查找这个异常吗?是的,当引发异常时,文件已经存在。
try:
# rename the file
os.rename(infilename, newname)
except FileExistsError:
# output if it exists already
print(f'{newname} already exists')
pass追溯是:
Exception has occurred: FileExistsError
[WinError 183] Cannot create a file when that file already exists: 'C:\\Users\\MacalusoC\\Desktop\\PNC_to_Evo\\Evo DECO-10\\Evo PROG6001 FSJD0250240M E.DBP' -> 'C:\\Users\\MacalusoC\\Desktop\\PNC_to_Evo\\Evo DECO-10\\Evo PROG6001 FSJD0250240M E.part'
File "C:\Users\MacalusoC\Desktop\PNC_to_Evo\PNC_Deco_to_Evo_Deco.py", line 75, in purge_DBP_files
os.rename(infilename, newname)
File "C:\Users\MacalusoC\Desktop\PNC_to_Evo\PNC_Deco_to_Evo_Deco.py", line 341, in main
purge_DBP_files(new_folder)
File "C:\Users\MacalusoC\Desktop\PNC_to_Evo\PNC_Deco_to_Evo_Deco.py", line 350, in <module>
main()发布于 2019-02-19 15:54:40
为什么不改变你的逻辑呢?通常情况下,最好先检查一下是否可以做某事,而不是试一试,看看它是否失败。
from os import path, rename
if not path.exists(newname):
rename(infilename, newname)发布于 2019-02-19 15:47:00
os.rename(src、dst、*、src_dir_fd=None、dst_dir_fd=None)将文件或目录src重命名为dst。如果dst是目录,则将引发OSError。在Unix上,如果dst存在并且是一个文件,如果用户有权限,它将被静默地替换。如果src和dst在不同的文件系统上,在某些Unix版本上,操作可能会失败。如果成功,重命名将是一个原子操作(这是POSIX要求)。在Windows上,如果dst已经存在,即使是文件,也会引发OSError。1
因此,无论是因为您在unix系统上,还是在捕获错误的异常时,都不会引发异常。
发布于 2019-02-19 15:55:25
下面的代码将尝试重命名一个文件。见先决条件检查
import os
def rename_file(current_file_name, new_file_name):
""" rename a file if 'current_file_name' exists and 'new_file_name' doesnt exist
:param current_file_name:
:param new_file_name:
:return:
"""
if os.path.exists(new_file_name) or not os.path.exists(current_file_name):
return
else:
os.rename(current_file_name, new_file_name)https://stackoverflow.com/questions/54770031
复制相似问题