2011-03-05 15 views
11

Bu, Catching an exception while using a Python 'with' statement numaralı soruların devamı niteliğindedir.
Oldukça yeni bir kullanıcıyım ve aşağıdaki kodu GNU/Linux üzerinde Python 3.2 ile test ettim. Yukarıda belirtilen soruda Bir Python 'with' ifadesi kullanıldığında bir istisna yakalamak - Bölüm 2

, buna benzer bir şeyi açıklamada 'ile' den istisna yakalamak için önerilmişti: Bana yapar

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

merak içerir: some_code onu yakalamadan bir IOError hatası yükseltir ne olur ? Açıkça 'dışardaki' ifadesiyle yakalanmıştı, ama gerçekten istediğim şey bu değildi.
Tamam diyebilirsiniz, sadece birkaç_kodu başka bir try-except ile kaydırın, vb., Ama istisnaların her yerden gelebileceğini biliyorum ve her kod parçasını korumak imkansız.
Özetle, sadece 'open' yazıp sadece 'open' ('foo.txt', 'a') istisnayı kaldırırsa yazdırmak istiyorum, bu yüzden aşağıdaki kodun neden önerilen standart olmadığını sormak için buradayım. Bunu yapmanın yolu:

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

with f: 
    # 
    # some_code 
    # 

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

Teşekkür ederiz!

cevap

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

Tam olarak haklısınız, 'else' altında 'with' yerleştirmeyi unutmuşum. – kynikos

+0

Her halükarda benim asıl sorum benim tahminim haklıymış olsaydı: diğer eski soruya verilen cevap bu yöntemden gerçekten daha kötüydü? – kynikos

+0

Tamam, bu durumdaki istisnayı halletmenin en iyi yolu sanırım, bu benim kabul ettiğim cevaptır. Belki de bunu başka bir soruya da kopyalayabilirsiniz: http://stackoverflow.com/questions/713794/catching-an-exception-while-using-a-python-with-statement – kynikos

İlgili konular