__enter__,__exit__,带有块不起作用

时间:2019-07-18 10:00:35

标签: python-3.x

当我尝试执行此代码时,它会返回此错误

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()

1 个答案:

答案 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__