当前位置: 首页 > 面试题库 >

建立目录时出现Python“ FileExists”错误

程正阳
2023-03-14
问题内容

我有几个线程在集群系统上从Python并行运行。每个python线程输出到一个目录mydir。每个脚本在输出前检查 mydir是否
存在,如果不存在,则创建它:

if not os.path.isdir(mydir):
    os.makedirs(mydir)

但这会产生错误:

os.makedirs(self.log_dir)                                             
  File "/usr/lib/python2.6/os.py", line 157, in makedirs
mkdir(name,mode)
OSError: [Errno 17] File exists

我怀疑这可能是由于种族情况造成的,其中一个工作在另一个工作到达之前创建了 目录 。这可能吗?如果是这样,如何避免该错误?

我不确定这是否是竞争条件,所以想知道Python中的其他问题是否会导致这种奇怪的错误。


问题答案:

在您检查某物和对其采取行动之间,任何时间代码都可以执行,您将处于竞争状态。避免这种情况的一种方法(也是Python中通常的方法)是尝试然后处理异常

while True:
    mydir = next_dir_name()
    try:
        os.makedirs(mydir)
        break
    except OSError, e:
        if e.errno != errno.EEXIST:
            raise   
        # time.sleep might help here
        pass

如果您有很多线程试图创建一系列可预测的目录,那么这仍然会引发很多异常,但是最终您会到达那里。在这种情况下,最好只有一个线程来创建目录



 类似资料:
  • 2015-06-14 22:01:08,185 INFO

  • 问题内容: 我正在尝试在Android的SD卡上建立一个名为“ images”的目录。这是我的代码,但是不起作用?谁能给我一些建议? 问题答案: 更新: 自Android 10,11 Storage更新以来 ,Google已通过标准编程语言文件操作来限制对Storage的访问。 对于仅针对Android 10(API 29)及更高版本的应用程序,您需要在Android清单文件中声明“ reques

  • 我想Java更新时区数据。据我所知,可以使用来解决这个问题。但是我收到了错误: Java版本是: 怎么了?

  • 异常:到http://access.xyz.com的连接在org.apache.http.impl.conn.DefaultClientConnectionOperator.OpenConnection(DefaultClientConnectionOperator.java:190)在org.apache.http.impl.conn.ManagedClientConnectionImpl.Op

  • 我正在使用eclipse、m2eclipse插件和maven创建一个新的maven项目,遵循以下步骤,http://o7planning.org/en/10101/install-maven-into-eclipse 但是,当创建一个新的maven项目时,没有JRE系统库,也没有maven库。只有如下所示的src、target和pom.xml。这正常吗?如果没有,我该如何避免呢?谢谢! 单击以获取