Python 当条件为false时,为什么if语句中的代码会运行?

Python 当条件为false时,为什么if语句中的代码会运行?,python,multiprocessing,filesystems,threadpool,Python,Multiprocessing,Filesystems,Threadpool,我有一个if语句,检查目录是否已经存在: if not os.path.exists(os.path.dirname(save_to)): os.makedirs(os.path.dirname(save_to)) 在此之后,文件被添加到目录save_to,无论它以前是否存在 有时,即使目录已经存在,也会执行if语句中的代码。这完全是随机的 我认为这是因为我正在使用multiprocessing.Pool.map将此任务分配给多个CPU。我认为过程1和2包含在if语句中。我认为进程1

我有一个if语句,检查目录是否已经存在:

if not os.path.exists(os.path.dirname(save_to)):
     os.makedirs(os.path.dirname(save_to))
在此之后,文件被添加到目录
save_to
,无论它以前是否存在

有时,即使目录已经存在,也会执行
if
语句中的代码。这完全是随机的

我认为这是因为我正在使用
multiprocessing.Pool.map
将此任务分配给多个CPU。我认为过程1和2包含在
if
语句中。我认为进程1然后创建目录,然后进程2尝试并失败

这就是我得到的错误:

multiprocessing.pool.RemoteTraceback:
"""
Traceback (most recent call last):
  File "/home/WNeill/anaconda3/lib/python3.8/multiprocessing/pool.py", line 125, in worker
    result = (True, func(*args, **kwds))
  File "/home/WNeill/anaconda3/lib/python3.8/multiprocessing/pool.py", line 51, in starmapstar
    return list(itertools.starmap(args[0], args[1]))
  File "/home/WNeill/who-said-what/wsw/preprocessing.py", line 147, in clip_audio ****!!!****
    os.makedirs(os.path.dirname(save_to))                                         ****!!!****
  File "/home/WNeill/anaconda3/lib/python3.8/os.py", line 223, in makedirs
    mkdir(name, mode)
FileExistsError: [Errno 17] File exists: '/home/WNeill/clipped/clipped/aldfly'
我想不出执行第147行的任何其他原因,该行对应于上面的代码段(也在堆栈跟踪中标记)

问题:

我如何解决这个问题(不管我的假设是否正确)

建议的解决方案:


我唯一的想法是可能使用参数
exist\u ok=True
并去掉
if
语句。但是,如果我使用这种方法,我担心会覆盖工作。我有大约8个小时的处理时间,我讨厌删除/覆盖某些内容。

一个有点大的解决方案是参考这篇文章


您可以使用此处提到的
管理器
在该部分代码中创建关键部分。换句话说,这将导致到达那里的第一个线程阻止其他线程执行该部分代码,只有在锁被释放后,它们才能继续愉快地工作。

Gibbs规则18:不要在之前询问,创建目录,如果引发异常,则处理异常。@KlausD。与其得到允许,不如请求原谅。就在上周,我在《PEP(?)编码风格指南》中读到了这一点。我应该考虑一下(但我会给自己一个通行证,因为我还在学习)。谢谢你的提醒!谢谢:)我选择使用try-except块,但我喜欢你的答案。我将选择您的解决方案,因为它有效,而且没有其他人愿意尝试。干杯