我正在尝试重命名文件,但是如果文件名已经存在就可以继续。该脚本以引发的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()
答案 0 :(得分:1)
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] https://docs.python.org/3/library/os.html
因此,要么是因为您使用的是Unix系统,要么是捕获了错误的异常,因此不会引发异常。
答案 1 :(得分:0)
为什么不改变你的逻辑?通常最好先检查是否可以先完成某件事,而不是先尝试看看是否失败。
from os import path, rename
if not path.exists(newname):
rename(infilename, newname)
答案 2 :(得分:0)
下面的代码将尝试重命名文件。参见前提条件检查
config='--psm 10 --oem 3 -c tessedit_char_whitelist=0123456789'