Sì, si comporta come il blocco finally
dopo un blocco try
, vale a dire viene sempre eseguito (a meno che il processo python non termini in modo insolito, ovviamente).
Viene anche menzionato in uno degli esempi di PEP-343, che è la specifica per l'istruzione 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).
Qualcosa degno di nota è tuttavia, che non si può prendere facilmente le eccezioni sollevate dalla chiamata open()
senza mettere l'intero blocco with
all'interno di un blocco try..except
che di solito non è quello che si desidera.
'else' potrebbe essere aggiunto a' with' per risolvere il problema 'try with except'. modifica: aggiunta alla lingua – rplnt
Non so se è rilevante, ma per quanto ne so 'Process.terminate() 'è uno dei pochi (l'unico?) scenario che non garantisce la chiamata di una istruzione' finally' : * "Si noti che i gestori di uscita e infine le clausole, ecc., Non verranno eseguiti." * –
@RikPoggi ['os._exit'] (https://docs.python.org/library/os.html#os. _exit) a volte viene utilizzato - Esce dal processo Python senza chiamare i gestori di cleanup. –