Elmo Elmo - 7 months ago 68
Python Question

On Error Resume Next in Python

Snippet 1



do_magic() # Throws exception, doesn't execute do_foo and do_bar
do_foo()
do_bar()


Snippet 2



try:
do_magic() # Doesn't throw exception, doesn't execute do_foo and do_bar
do_foo()
do_bar()
except:
pass


Snippet 3



try: do_magic(); except: pass
try: do_foo() ; except: pass
try: do_bar() ; except: pass


Is there a way to write code snippet 3 elegantly?


  • if
    do_magic()
    fails or not,
    do_foo()
    and
    do_bar()
    should be executed.

  • if
    do_foo()
    fails or not,
    do_bar()
    should be executed.



In Basic/Visual Basic/VBS, there's a statement called
On Error Resume Next
which does this.

Answer

In Python 3.4 onwards, you can use contextlib.suppress:

from contextlib import suppress

with suppress(Exception): # or, better, a more specific error (or errors)
    do_magic()
with suppress(Exception):
    do_foo()
with suppress(Exception):
    do_bar()

Alternatively, fuckit.

Comments