使用try / except或if else创建和验证目录?

时间:2014-01-13 15:03:29

标签: python python-2.7

这只是一个关于哪一个更“pythonic”的问题

使用if:

import os
somepath = 'c:\\somedir'
filepath = '%s\\thefile.txt' % somepath
if not os.path.exists(somepath) and not os.path.isfile(filepath):
    os.makedirs(somepath)
    open(filepath, 'a').close
else:
   print "file and dir allready exists"

或使用try / Except:

import os
somepath = 'c:\\somedir'
filepath = '%s\\thefile.txt' % somepath
try:
    os.makedirs(somepath)
except:
    print "dir allready exists"
try:
    with open(filepath):
        // do something
except:
    print "file doens't exist"

正如您在上面的示例中所看到的,哪一个在python上会更正确?另外,在哪些情况下我应该使用try / except而不是if / else?我的意思是,我应该将所有的if / else测试替换为try / except吗?

提前致谢。

1 个答案:

答案 0 :(得分:7)

第二个是pythonic:“更容易请求宽恕而非许可。”

但在特定情况下使用异常还有另一个好处。如果您的应用程序运行多个进程或线程,“请求权限”不保证一致性。例如,下面的代码在单线程中运行良好,但可能会在多个代码中崩溃:

if not os.path.exists(somepath):
    # if here current thread is stopped and the same dir is created in other thread
    # the next line will raise an exception
    os.makedirs(somepath)