Search code examples
pythonwith-statementcontextmanageras-keyword

python's `with` statement target is unexpectedly None


seems like I do not understand something with---the python with statement.

Consider this class:

class test(object):
    def __enter__(self): pass
    def __exit__(self, *ignored): pass

now, when using it with with, like in

with test() as michael:
    print repr(michael)

I would expect some output like <test instance at memore blah>. But I get None.

Something wrong here? Any suggestions would help.

(I am using Python 2.6.6.)

EDIT:

Thanks to ephement for pointing me to the documentation. The __enter__ method should read

    def __enter__(self): return self

Solution

  • From the with documentation:

    If a target was included in the with statement, the return value from __enter__() is assigned to it.

    If you def __enter__(self): return self, then your expected output is produced.