kas*_*erd 5 python exception try-finally
在 Python 程序中,我的代码具有以下结构:
try:
value = my_function(*args)
finally:
with some_context_manager:
do_something()
if 'value' in locals():
do_something_else(value)
Run Code Online (Sandbox Code Playgroud)
但是'value' in locals()结构感觉有点脆弱,我想知道是否有更好的方法来做到这一点。
我真正想要的是finally根据try块是否引发异常,内部代码的行为略有不同。有没有办法知道是否引发了异常?
如果目标是“当出现异常时,做一些不同的事情”,那么:
exception_raised = False
try:
value = my_function(*args)
except:
exception_raised = True
raise
finally:
with some_context_manager:
do_something()
if not exception_raised:
do_something_else(value)
Run Code Online (Sandbox Code Playgroud)
现在,如果您要实际处理多个异常,我建议:
completed_successfully = False
try:
value = my_function(*args)
else:
completed_successfully = True
finally:
with some_context_manager:
do_something()
if completed_sucessfully:
do_something_else(value)
Run Code Online (Sandbox Code Playgroud)