Cleanup After Exception
I have a bit of code that resembles the following: try: fn() except ErrorA as e: ... do something unique ... cleanup() except ErrorB as e: ... do something unique .
Solution 1:
def_cleanup():
# clean it upreturn
cleanup = _cleanup
try:
# stuffexcept:
# handle itelse:
cleanup = lambda: None
cleanup()
Solution 2:
The most clear way I can think of is do exactly the opposite of else
:
do_cleanup = Truetry:
fn()
except ErrorA as e:
... do something unique ...
except ErrorB as e:
... do something unique ...
except ErrorC as e:
... do something unique ...
else:
do_cleanup = Falseif do_cleanup:
cleanup()
If the code is enclosed and lets itself be done, you can simplify it by returning or breaking in the else
.
Solution 3:
How about catching all the exceptions with one except
clause and dividing up the different parts of your handling with if/elif
blocks:
try:
fn()
except (ErrorA, ErrorB, ErrorC) ase:
ifisinstance(e, ErrorA):
... dosomethingunique ...
elifisinstance(e, ErrorB):
... dosomethingunique ...
else: # isinstance(e, ErrorC)
... dosomethingunique ...
cleanup()
Post a Comment for "Cleanup After Exception"