考虑以下示例:
with open('a.txt') as f:
pass
# Is f supposed to be defined here?
我已经阅读了with-statement的语言文档(2.7)以及PEP-343,但据我所知,他们没有关于这个问题的任何内容。
在CPython 2.6.5中,f
似乎是在with-块之外定义的,但我不希望依赖于可能发生变化的实现细节。
发布于 2011-06-22 05:50:25
with
语法:
with foo as bar:
baz()
糖大约是用来:
try:
bar = foo.__enter__()
baz()
finally:
if foo.__exit__(*sys.exc_info()) and sys.exc_info():
raise
这通常很有用。例如
import threading
with threading.Lock() as myLock:
frob()
with myLock:
frob_some_more()
上下文管理器可以不止一次地被使用。
发布于 2011-06-22 07:22:59
回答Heikki在评论中的问题:是的,这个作用域行为是Python语言规范的一部分,可以在任何和所有兼容的python (包括PyPy、Jython和IronPython)上工作。
https://stackoverflow.com/questions/6432355
复制相似问题