¿Cómo "con" es mejor que intentar / atrapar para abrir un archivo en Python?

Tengo que elwitha declaración @ te ayuda a convertir esto:

try:
    f = open(my_file)
    do_stuff_that_fails()
except:
    pass
finally:
    f.close()

Dentro

with open(my_file) as f:
    do_stuff_that_fails()

Pero, ¿cómo es eso mejor? Aún debe manejar el caso con el archivo que no se puede abrir (como pedirle al usuario que le diga que no tiene permisos), por lo que en realidad tendría:

try:
    with open(my_file) as f:
        do_stuff_that_fails()
except (IOError, OSError, Failure) as e:
    do_stuff_when_it_doesnt_work()

Que es equivalente a:

try:
    f = open(my_file)
    do_stuff_that_fails()
except (IOError, OSError, Faillure) as e:
    do_stuff_when_it_doesnt_work()
finally:
    f.close()

Sí, ganó dos líneas, pero agregó un nivel de anidamiento que no hace que sea más fácil de leer. Es el propósito de lawith declaración para guardar dos líneas o me estoy perdiendo algo?

Parece mucho agregar una palabra clave solo por eso, así que siento que hay algo de sintaxis para manejar el intento adicional / excepto que no lo sé.

Respuestas a la pregunta(6)

Su respuesta a la pregunta