【发布时间】:2017-09-04 15:26:28
【问题描述】:
在 Python 程序中,我的代码具有以下结构:
try:
value = my_function(*args)
finally:
with some_context_manager:
do_something()
if 'value' in locals():
do_something_else(value)
但是'value' in locals() 结构感觉有点脆弱,我想知道是否有更好的方法来做到这一点。
我真正想要的是finally 中的代码根据try 块是否引发异常而略有不同。有没有办法知道是否引发了异常?
【问题讨论】:
-
我认为您想要的是另一个上下文管理器,而不是 try/finally 语法。
__exit__会知道是否有异常。 -
您也可以使用
else块,它仅在没有引发异常时运行。 -
@AshwiniChaudhary
else块将在finally块之前运行,这会改变 OP 代码的语义。 -
@AshwiniChaudhary 但我只想在没有异常时运行的代码位于
finally块调用的上下文管理器中。 -
do_something一定要在my_functionmy_function之后运行吗?
标签: python exception try-finally