更建议使用哪种方法或检查条件:
import os
# method 1
if not os.path.exists("somedir"):
os.makedirs("somedir")
# method 2
try:
assert not os.path.exists("somedir")
except AssertionError:
pass
else:
os.makedirs("somedir")
# method 3
try:
os.makedirs("somedir")
except OSError:
pass
方法3是否仍会破坏Python的Zen(如果有一些日志记录,“错误绝不能静默传递。”
答案 0 :(得分:1)
通常,方法3更好。其他方法引入了竞争条件,在这种情况下,测试目录的存在之后但实际尝试创建该目录之前,另一个进程可以创建该目录。
如评论中所指出的,exist_ok
选项为您做到这一点,只要该异常是由预先存在的目录引起的,就不会引发异常(同时仍为 other引发异常) 错误)。