Suppose that I have a threading.Lock() object that I want to acquire in order to use a resource. Suppose I want to use a try ... except ... clause with the resource.
There are several ways of doing this.
Method 1
import threading
lock = threading.Lock()
try:
    with lock:
        do_stuff1()
        do_stuff2()
except:
    do_other_stuff()
If an error occurs during do_stuff1() or do_stuff2(), will the lock be released? Or is it better to use one of the following methods?
Method 2
with lock:
    try:
        do_stuff1()
        do_stuff2()
    except:
        do_other_stuff()
Method 3
lock.acquire():
try:
    do_stuff1()
    do_stuff2()
except:
    do_other_stuff()
finally:
    lock.release()
Which method is best for the lock to be released even if an error occurs?
 
    