Является ли 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")

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос