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()
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.