首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么除了阻止不捕获FileExistsError之外?

为什么除了阻止不捕获FileExistsError之外?
EN

Stack Overflow用户
提问于 2019-02-19 15:43:07
回答 3查看 858关注 0票数 0

我试图重命名一个文件,但是如果文件名已经存在,就继续前进。脚本终止时引发了FileExistsError异常,尽管我想我是在告诉它要查找这个异常吗?是的,当引发异常时,文件已经存在。

代码语言:javascript
复制
try:
    # rename the file
    os.rename(infilename, newname)
except FileExistsError:
    # output if it exists already
    print(f'{newname} already exists')
    pass

追溯是:

代码语言:javascript
复制
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()
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-19 15:54:40

为什么不改变你的逻辑呢?通常情况下,最好先检查一下是否可以做某事,而不是试一试,看看它是否失败。

代码语言:javascript
复制
from os import path, rename

if not path.exists(newname):
    rename(infilename, newname)
票数 0
EN

Stack Overflow用户

发布于 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系统上,还是在捕获错误的异常时,都不会引发异常。

票数 1
EN

Stack Overflow用户

发布于 2019-02-19 15:55:25

下面的代码将尝试重命名一个文件。见先决条件检查

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54770031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档