2014-11-14 45 views
2

一個簡單的方法來打開文件並閱讀其內容是使用with整合的異常在Python處理「與」

with open ('file.txt', "r") as filehandle: 
    contents = filehandle.read() 

但是,這並不包括在某種程度上除外文件打開的錯誤,一個try/except將:

try: 
    filehandle = open('file.txt', 'r') 
    contents = filehandle.read() 
except IOError: 
    print('There was an error opening the file!') 
    sys.exit() 

有沒有在with語句,以便它正常退出如果打開失敗,將在更少的代碼進行比第二個例子還提供相同的功能整合的失敗消息的方法嗎?如果不是這樣,是否還有比第二種形式更優雅(或簡約)的東西?

回答

0
from contextlib import contextmanager 

@contextmanager 
def safe_open(fname,mode): 
    try: 
     fh = open(fname,mode) 
    except IOError: 
     print "ERROR OPENING FILE :",fname 
     sys.exit() 
    else: 
     yield fh 
     try: 
      fh.close() 
     except: 
      pass 


with safe_open("nofile","rb") as f: 
    f.write("blah") 

林不知道它的更優雅,但不做評論

+0

因爲你看到的實施......如果你只是做'從util的進口safe_open'這看起來不是很優雅僅 – amphibient 2014-11-14 17:51:24

+0

多數民衆贊成。 ..然後使用它。那麼它的優雅...( – 2014-11-14 18:04:39