Originariamente inviato da ESSE-EFFE
Non necessariamente. Va bene anche un Try...Except nel qual caso ovviamente la critical section va sbloccata dopo il blocco Except.
In questo caso, può andare bene; in generale, non si tratta dello scopo specifico del "try...except", poiché

1)
è il costrutto "try...finally" ad esprimere, in generale, il concetto "qualunque cosa succeda, fai...";

2)
all'atto pratico, non è possibile inserire un raise nel blocco di gestione dell'eccezione senza modificare il codice restante, poiché in questo caso il rilascio della CriticalSection non verrebbe eseguita;

3)
usando la "try...except", è obbligatorio occuparsi logicamente e fattivamente della gestione dell'errore, cosa che non sempre è voluta o si vuole affrontare (o almeno, non in quella sede specifica, ma magari in un punto superiore del "call stack").

In breve, usare sempre il costrutto "try...except" per garantire il rilascio di risorse è fuorviante: serve per la gestione degli errori, quindi va inserito solo se si intende farla in questo contesto, lasciando al blocco "try...finally" il compito di racchiudere e separare i blocchi protetti di codice da quelli preposti al rilascio delle risorse allocate, indipendentemente dalla presenza - o meno - di codice per la gestione degli errori, che potrebbe anche non essere presente.

Ciao!