Является ли Python * с * оператором в точности эквивалентным блоку try - (кроме) - finally?
Я знаю, что это широко обсуждалось, но я все еще не могу найти ответ, чтобы подтвердить это:с оператор, идентичный вызову того же кода в блоке try - (кроме) -finally, где все, что определяется в__exit__
функция контекстного менеджера находится в блоке finally?
Например, эти 2 фрагмента кода делают одно и то же?
import sys
from contextlib import contextmanager
@contextmanager
def open_input(fpath):
fd = open(fpath) if fpath else sys.stdin
try:
yield fd
finally:
fd.close()
with open_input("/path/to/file"):
print "starting to read from file..."
такой же как:
def open_input(fpath):
try:
fd = open(fpath) if fpath else sys.stdin
print "starting to read from file..."
finally:
fd.close()
open_input("/path/to/file")
Спасибо!