我很困惑为什么在 Python docs 8.5hit_except
的以下代码中是必要的。with 声明:
以下代码:
with EXPRESSION as TARGET: SUITE
在语义上等价于:
manager = (EXPRESSION) enter = type(manager).__enter__ exit = type(manager).__exit__ value = enter(manager) hit_except = False try: TARGET = value SUITE except: hit_except = True if not exit(manager, *sys.exc_info()): raise finally: if not hit_except: exit(manager, None, None, None)
是不是像这样写得更简单,还是我缺少区别?
manager = (EXPRESSION)
enter = type(manager).__enter__
exit = type(manager).__exit__
value = enter(manager)
try:
TARGET = value
SUITE
except:
if not exit(manager, *sys.exc_info()):
raise
else:
exit(manager, None, None, None)
finally
保护任何“退出”当前try
范围的操作。
如果存在跳过其余代码的操作,例如return
andexit()
或continue
/ break
(在循环中),else
则将跳过该部分。在所有这些情况下,该finally
子句仍将触发。
强制跳过上下文管理器finally
和__exit__
上下文管理器部分的一个示例是os._exit()
,在大多数情况下,这可能是一种矫枉过正的做法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句