我正在定義一個上下文管理器類,如果在實例化過程中遇到某些條件,我希望能夠跳過代碼塊而不引發異常。例如,跳過-with-block的執行
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...'
我發現了這一點,但我不太清楚如何理解它,也不知道如何實現它。 http://www.python.org/dev/peps/pep-0377/還有其他更優雅的方式嗎? –
事實上,這是一個PEP(以及對語義變化的討論),這表明它不能在不訴諸改變解釋器行爲的情況下實施。 – nneonneo
癡迷於整潔? :)與A(),B():其中B的__enter__可以引發一些東西似乎對我來說很好。 – swang