2011-03-05 10 views
11

esta es una continuación de la pregunta Catching an exception while using a Python 'with' statement.
Soy bastante novato y probé el siguiente código con Python 3.2 en GNU/linux.Capturando una excepción al usar una instrucción Python 'con' - Parte 2

En la pregunta antes mencionada, se propuso algo similar a esto para capturar una excepción de un 'con' declaración:

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

Eso me hace pensar: ¿qué ocurre si some_code plantea una IOError sin la captura de él ? Obviamente está atrapado por la declaración externa 'excepto', pero eso no podría ser lo que realmente quería.
Podrías decir que está bien, simplemente envuelve some_code con otra prueba, excepto, y así sucesivamente, pero sé que las excepciones pueden venir de todas partes y es imposible proteger cada parte del código.
En resumen, solo quiero imprimir 'error' si y solo si open ('foo.txt', 'a') plantea la excepción, entonces estoy aquí para preguntar por qué el siguiente código no es el estándar sugerido forma de hacer esto:

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

with f: 
    # 
    # some_code 
    # 

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

Gracias!

Respuesta

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

Tiene toda la razón, olvidé colocar 'con' en 'else'. – kynikos

+0

De todos modos mi pregunta principal era si mi conjetura era correcta: ¿la respuesta dada a la otra pregunta anterior era realmente peor que este método? – kynikos

+0

Ok, supongo que esta es la mejor manera de manejar la excepción en este caso, así que esta es mi respuesta aceptada. Tal vez podrías copiar este también en la otra pregunta http://stackoverflow.com/questions/713794/catching-an-exception-while-using-a-python-with-statement – kynikos

Cuestiones relacionadas