복붙노트

[PYTHON] 컨텍스트 관리자를 사용할 때 개체가 없음이됩니다.

PYTHON

컨텍스트 관리자를 사용할 때 개체가 없음이됩니다.

왜이 일을하지 않았는가?

class X:
    var1 = 1
    def __enter__(self): pass
    def __exit__(self, type, value, traceback): pass

with X() as z:
    print z.var1

나는 얻다:

print z.var1
AttributeError: 'NoneType' object has no attribute 'var1'

해결법

  1. ==============================

    1.X의 정의를 다음으로 변경하십시오.

    X의 정의를 다음으로 변경하십시오.

    class X(object):
        var1 = 1
        def __enter__(self):
            return self
        def __exit__(self, type, value, traceback):
            pass
    

    with는 __enter __ () 메서드의 반환 값을 as 뒤에 오는 이름에 지정합니다. 귀하의 __enter __ ()는 없음을 반환했으며, 이는 z에 할당되었습니다.

    클래스를 새로운 스타일의 클래스로 변경했습니다 (이 클래스는 작동시키기에 중요하지 않습니다).

  2. ==============================

    2.컨텍스트 관리자 용 문서를 참조하십시오.

    컨텍스트 관리자 용 문서를 참조하십시오.

    __enter__ 메서드는 아무 것도 반환하지 않습니다. 이는 None을 반환하는 것과 같습니다.

  3. from https://stackoverflow.com/questions/5093382/object-becomes-none-when-using-a-context-manager by cc-by-sa and MIT license