【发布时间】:2012-09-17 15:09:23
【问题描述】:
我正在定义一个上下文管理器类,如果在实例化过程中满足某些条件,我希望能够跳过代码块而不引发异常。例如,
class My_Context(object):
def __init__(self,mode=0):
"""
if mode = 0, proceed as normal
if mode = 1, do not execute block
"""
self.mode=mode
def __enter__(self):
if self.mode==1:
print 'Exiting...'
CODE TO EXIT PREMATURELY
def __exit__(self, type, value, traceback):
print 'Exiting...'
with My_Context(mode=1):
print 'Executing block of codes...'
【问题讨论】:
-
我找到了这个,但我不太清楚如何理解它,也不知道如何实现它。 python.org/dev/peps/pep-0377还有其他更优雅的方式吗?
-
它是 PEP 的事实(以及对语义变化的讨论)表明如果不改变解释器的行为就无法实现它。
-
痴迷于整洁? :) with A(), B(): 其中 B 的 enter 可以提高一些东西对我来说似乎很好。
-
我也需要这个功能。但唯一的建议是以非 hacky 的方式做到这一点,需要向 python 添加一个新的系统异常。该提案是 rejected,因为人们认为增加语言复杂性的成本不值得。
标签: python with-statement skip