A instrução Python * with * é exatamente equivalente a um bloco try - (except) - finalmente?
Sei que isso foi amplamente discutido, mas ainda não consigo encontrar uma resposta para confirmar isso: é ocom instrução idêntica à chamada do mesmo código em um bloco try (exceto) -finally, em que o que quer que seja definido no__exit__
função do gerenciador de contexto é colocada no bloco finalmente?
Por exemplo - esses dois trechos de código estão fazendo exatamente a mesma coisa?
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..."
o mesmo que:
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")
Obrigado!