Como "com" é melhor que tentar / capturar para abrir um arquivo em Python?

Entendi que owith instrução @ ajuda você a ativar isso:

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

Para dentro

with open(my_file) as f:
    do_stuff_that_fails()

Mas como isso é melhor? Você ainda precisa lidar com o caso com o arquivo que não pode ser aberto (como solicitar ao usuário que ele não tem permissões), então, na realidade, você teria:

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

Qual é o 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()

Sim, você ganhou duas linhas, mas adicionou um nível de aninhamento que não facilita a leitura. O objetivo dowith declaração para salvar duas linhas ou estou faltando alguma coisa?

Parece muito adicionar uma palavra-chave apenas para isso, então sinto que há algumas sintaxe para lidar com a tentativa adicional / exceto que eu não se

questionAnswers(3)

yourAnswerToTheQuestion