开发者

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.

Somethin开发者_Go百科g 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


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.


From the docs:

object.__enter__(self)

Enter the runtime context related to this object. The with statement will bind this method’s return value to the target(s) specified in the as clause of the statement, if any.


I get the same thing for repr(michael)

Try this instead:

m.__repr__()

I'm not entirely sure, but I think it has something to do with the fact that you haven't defined the repr method in your test class

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜