私はコンテキストマネージャクラスを定義していますが、インスタンス化中に特定の条件が満たされていれば例外を発生させずにコードブロックをスキップできます。たとえば、-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