Python创建目录时如何忽略已存在目录解决FileExistsError报错
报错原因
你的代码有两处逻辑错误直接触发异常:
- 外层的路径判断完全无效:你直接把整个
names列表拼接到路径字符串里,生成的是../database/['Abby','Betty','Bella','Peter','Jack','Sonya']这种不存在的非法路径,所以外层if判断永远会走到else的创建分支,根本起不到提前检测的作用。 - 存在检测没有和循环创建逻辑绑定:你只在循环外做了一次无效检测,循环创建每个文件夹时没有单独判断对应路径是否存在,只要某一个名字的文件夹已经提前创建过,
os.makedirs默认就会抛出FileExistsError中断运行。
修正代码
把存在校验挪到循环内,对每个名称对应的文件夹单独做检测,同时给os.makedirs加上exist_ok=True做兜底,避免文件系统竞态(比如你检测完路径不存在、准备创建的间隙,刚好有其他程序创建了同路径文件夹的极端情况),代码如下:
import os names = ['Abby','Betty','Bella','Peter','Jack','Sonya'] base_dir = '../database' for name in names: target_folder = os.path.join(base_dir, name) if os.path.exists(target_folder): print(f'{name} folder exists') else: os.makedirs(target_folder, exist_ok=True)
如果你需要的是「只要有任意一个名称文件夹存在就打印一次提示」,而不是逐个文件夹打印存在提示,可以在循环前加个标记位累计存在状态,循环结束后统一判断打印即可,核心的逐路径校验、
exist_ok兜底的逻辑不变。
内容的提问来源于stack exchange,提问作者Lil_coder
相关产品推荐
相关产品推荐

