2011-03-05 43 views
11

這是問題Catching an exception while using a Python 'with' statement的延續。
我很新手,我在GNU/linux上用Python 3.2測試了下面的代碼。使用Python'with'語句捕獲異常 - 第2部分

在上面提到的問題,與此類似,提出了從「用」的語句捕捉異常:

try: 
    with open('foo.txt', 'a'): 
     # 
     # some_code 
     # 
except IOError: 
    print('error') 

這讓我懷疑:如果some_code提出了一個IOError卻一無所獲,但它會發生什麼?這顯然被外部的「除外」聲明所吸引,但那不可能是我真正想要的。
你可以說好,只需用另一個try-except等包裝some_code,但我知道異常可以來自任何地方,並且不可能保護每一段代碼。
總之,我只是想打印'錯誤'當且僅當打開('foo.txt','a')引發異常,所以我在這裏要問,爲什麼下面的代碼不是標準的建議這樣做的方式:

try: 
    f = open('foo.txt', 'a') 
except IOError: 
    print('error') 

with f: 
    # 
    # some_code 
    # 

#EDIT: 'else' statement is missing, see Pythoni's answer 

謝謝!

回答

13
try: 
    f = open('foo.txt', 'a') 
except IOError: 
    print('error') 
else: 
    with f: 
     # 
     # some_code 
     # 
+1

你是完全正確的,我忘了在'else'下放置'with'。 – kynikos

+0

無論如何,我的主要問題是,如果我的猜測是正確的:給其他老問題的答案真的比這個方法更糟? – kynikos

+0

好吧,我想這是處理這種情況下異常的最好方法,所以這是我接受的答案。也許你可以複製這一個也在另一個問題http://stackoverflow.com/questions/713794/catching-an-exception-while-using-a-python-with-statement – kynikos