A lot of times I find myself writing something that looks like this:
try:
procedure_a()
except WrongProcedureError:
try:
procedure_b()
except WrongProcedureError:
try:
procedure_c()
except WrongProcedureError:
give_up()
This is hideous. Is there a more elegant way to implement this kind of "try things until one doesn't exception" logic? It seems like this is the kind of thing that would come up a lot; I'm hoping there's some language feature I don't know about that's designed for this exact thing.
You can use a for/else
construct for this:
for proc in [procedure_a, procedure_b, procedure_c]:
try:
proc()
except WrongProcedureError:
continue
else:
break
else:
give_up()
The else
clause of the for
loop triggers only when control falls off the bottom of the for clause naturally. If you break
out (as you will if any of the three procedures do not throw an exception), it won't trigger.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With