kab*_*nus 3 python exception-handling
我有一个try:finally必须始终执行(无论是否异常)的块,除非发生特定的异常。为了论证,我们假设它是一个ValueError,所以我问我是否可以实现:
try:
stuff()
except Exception as e:
if type(e) is ValueError: raise
#do important stuff
raise
#do important stuff
Run Code Online (Sandbox Code Playgroud)
以一种更优雅的方式跳过复制粘贴#importantstuff。如果我统治Python,它将看起来像:
try:
stuff()
finally except ValueError:
#do important stuff
Run Code Online (Sandbox Code Playgroud)
把#importantstuff一个函数是不是一个答案,但不可能IS。
如果您需要finally在特定条件下跳过某些内容,则需要使用一个显式标志:
do_final_stuff = True
try:
# ...
except ValueError:
do_final_stuff = False
raise
finally:
if do_final_stuff:
# ...
Run Code Online (Sandbox Code Playgroud)
您还可以在此处使用上下文管理器进行清理。如果存在以下情况,则将当前的活动异常传递给上下文管理器:
class MyContextManager:
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, tb):
if exc_type is not ValueError:
# do cleanup
with MyContextManager():
# ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
862 次 |
| 最近记录: |