Я понял, что инструкция with
поможет вам сделать это:
try:
f = open(my_file)
do_stuff_that_fails()
except:
pass
finally:
f.close()
В:
with open(my_file) as f:
do_stuff_that_fails()
Но как это лучше? Вы все еще должны обрабатывать дело, когда файл не может быть открыт (например, подскажите пользователю, чтобы он сказал ему, что у него нет разрешений), поэтому на самом деле вы бы:
try:
with open(my_file) as f:
do_stuff_that_fails()
except (IOError, OSError, Failure) as e:
do_stuff_when_it_doesnt_work()
Что эквивалентно:
try:
f = open(my_file)
do_stuff_that_fails()
except (IOError, OSError, Faillure) as e:
do_stuff_when_it_doesnt_work()
finally:
f.close()
Да, вы получили две строки, но вы добавили уровень вложенности, который не упрощает чтение. Является ли цель оператора with
сохранением двух строк или я что-то упускаю?
Кажется, что нужно добавить ключевое слово только для этого, поэтому я чувствую, что есть некоторый синтаксис для обработки дополнительной попытки/кроме того, о которой я не знаю.