Elm*_*lmo 9 python error-handling exception
do_magic() # Throws exception, doesn't execute do_foo and do_bar
do_foo()
do_bar()
Run Code Online (Sandbox Code Playgroud)
try:
do_magic() # Doesn't throw exception, doesn't execute do_foo and do_bar
do_foo()
do_bar()
except:
pass
Run Code Online (Sandbox Code Playgroud)
try: do_magic(); except: pass
try: do_foo() ; except: pass
try: do_bar() ; except: pass
Run Code Online (Sandbox Code Playgroud)
有没有办法优雅地编写代码片段3?
do_magic()失败或没有,do_foo()而do_bar()应该执行.do_foo()失败,do_bar()应该执行.在Basic/Visual Basic/VBS中,有一个语句叫做On Error Resume Next这个.
jon*_*rpe 14
在Python 3.4及更高版本中,您可以使用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()
Run Code Online (Sandbox Code Playgroud)
或者,fuckit.
如果所有三个函数都接受相同数量的参数:
for f in (do_magic, do_foo, do_bar):
try:
f()
except:
pass
Run Code Online (Sandbox Code Playgroud)
否则,用函数调用包装lambda.
for f in (do_magic, lambda: do_foo(arg1, arg2)):
try:
f()
except:
pass
Run Code Online (Sandbox Code Playgroud)