Considera lo siguiente:
with open(path, mode) as f:
return [line for line in f if condition]
¿El archivo se cerrará correctamente, o el uso de return
alguna manera omite el administrador de contexto ?
python
return
with-statement
Brisa ligera
fuente
fuente
else
podría agregarsewith
para resolver esetry with except
problema. editar: agregado al idiomaProcess.terminate()
es uno de los pocos (¿el único?) Escenario que no garantiza la llamada de unafinally
declaración: "Tenga en cuenta que los controladores de salida y finalmente las cláusulas, etc., no serán ejecutado."os._exit
veces se usa: sale del proceso de Python sin llamar a los controladores de limpieza.with
pasa si devuelvo una expresión de generador desde dentro del bloque, la garantía se mantiene mientras el generador siga produciendo valores? durante todo el tiempo que lo haga referencia? Es decir, ¿necesito usardel
o asignar un valor diferente a la variable que contiene el objeto generador?ValueError: I/O operation on closed file.
.Si.
..es más o menos equivalente a:
Más exactamente, el
__exit__
método en un administrador de contexto siempre se llama al salir del bloque (independientemente de las excepciones, devoluciones, etc.). El__exit__
método del objeto de archivo solo llamaf.close()
(por ejemplo, aquí en CPython )fuente
finally
keywrod es:def test(): try: return True; finally: return False
.Si. En términos más generales, el
__exit__
método de un Administrador de contexto de declaración con se llamará en el caso de unreturn
desde dentro del contexto. Esto se puede probar con lo siguiente:El resultado es:
El resultado anterior confirma que
__exit__
fue llamado a pesar de lo tempranoreturn
. Como tal, el administrador de contexto no se omite.fuente
Sí, pero puede haber algún efecto secundario en otros casos, ya que podría hacer algo (como búfer de lavado) en el
__exit__
bloquefuente