2014-01-13 60 views
1

這僅僅是關於哪一個會更「Python的」使用try/except或if else創建和驗證目錄?

使用,如果一個問題:

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 /除外:

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測試來嘗試/除外?

在此先感謝。

+0

只是一個評論,這不是必須的,但在你的情況下使用時除外試圖抓住一個特定......像' OSError'爲'makedirs'。 –

+0

你也可以看看這個[post](http://stackoverflow.com/a/7604717/1982962) –

回答

5

第二個是更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)