当我尝试执行此代码时,它会返回此错误
Traceback (most recent call last):
File "with.py", line 13, in <module>
with A as a:
AttributeError: __enter__"
我进行搜索,发现当我没有定义__enter__
或__exit__
方法时会发生此错误。但我同时定义了两者,仍然出现此错误
class A:
def __enter__(self):
self.t='printing from enter variable t'
return self.t
def fun(self):
print("inside fun")
print(self.t)
def __exit__(self, exception_type, exception_value, traceback):
print("exiting.........")
print(exception_type, exception_value, traceback)
with A as a:
a.fun()
答案 0 :(得分:0)
这里有两个错误。您收到的错误消息是因为您试图将类本身用作上下文管理器而不是实例。
with A() as a: # uses an instance of A
代替
with A as a: # uses the class A
类A没有__enter__
和__exit__
方法,因为它是type
的实例。
第二个是将a
绑定到__enter__
方法的返回值(在本例中为字符串)。
字符串没有fun
方法,因此将引发属性错误。我想您想从return self
方法中__enter__
。