if-check或try-assert-except是否更合适?为什么

时间:2018-09-27 18:04:50

标签: python

更建议使用哪种方法或检查条件:

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(如果有一些日志记录,“错误绝不能静默传递。”

1 个答案:

答案 0 :(得分:1)

通常,方法3更好。其他方法引入了竞争条件,在这种情况下,测试目录的存在之后但实际尝试创建该目录之前,另一个进程可以创建该目录。

如评论中所指出的,exist_ok选项为您做到这一点,只要该异常是由预先存在的目录引起的,就不会引发异常(同时仍为 other引发异常) 错误)。