Sí, actúa como el bloque finally
después de un bloque try
, es decir, siempre se ejecuta (a menos que el proceso de pitón termine de una manera inusual, por supuesto).
También se menciona en uno de los ejemplos de PEP-343 que es la especificación de la declaración with
:
with locked(myLock):
# Code here executes with myLock held. The lock is
# guaranteed to be released when the block is left (even
# if via return or by an uncaught exception).
Algo digno de mencionar es, sin embargo, que no se puede coger fácilmente las excepciones producidas por la llamada open()
sin poner todo el bloque with
dentro de un bloque try..except
que generalmente no es lo que uno quiere.
'else' podría agregarse a' with' para resolver ese problema 'try with except'. editar: agregado al lenguaje – rplnt
No sé si es relevante, pero que yo sepa 'Process.terminate()' es uno de los pocos (¿el único?) escenario que no garantiza la invocación de una sentencia 'finally' : * "Tenga en cuenta que los manejadores de salida y finalmente las cláusulas, etc., no se ejecutarán." * –
@RikPoggi ['os._exit'] (https://docs.python.org/library/os.html#os. _exit) a veces se utiliza: sale del proceso de Python sin llamar a los controladores de limpieza. –