假设您有一个定义了方法的类,__enter__
如下__exit__
所示:
class MyClass:
def f(self):
raise Exception
def __enter__(self):
return self
def __exit__(self, type, value, traceback):
pass
如果在块内引发异常with
,如下所示:
with MyClass() as ins:
ins.f()
该__exit__
方法将被隐式调用,这非常好。
但是,如果您的课程是这样的:
class MyClass:
def __init__(self):
self.f()
def f(self):
raise Exception
def __enter__(self):
return self
def __exit__(self, type, value, traceback):
pass
你像这样实例化它:
with MyClass() as ins:
pass
当在__init__
方法内部引发异常时,__enter__
尚未调用,并且也未调用__exit__
,这不太好。解决此问题的最佳方法是什么?