0

私はPEP343を読んでいて、いくつかの例を作成しようとしています。しかし、今ははっきりしていません。特にエラーがあるため:

>>> def f():
...     return 'f'
... 
>>> with f(): # or as f
...     print f() # or f
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: __exit__

実際、この関数にはメソッドがありません__exit__withでは、このステートメントをどのように使用しますか?

4

1 に答える 1

3

関数でwithステートメントを使用する場合は、contextlib.contextmanagerデコレータを使用できます。

ドキュメントからの例:

from contextlib import contextmanager

@contextmanager
def tag(name):
    print "<%s>" % name
    yield
    print "</%s>" % name

>>> with tag("h1"):
...    print "foo"
...
<h1>
foo
</h1>
于 2012-04-28T21:55:58.097 に答える