我在Whoosh文档中看到了一些代码:
with ix.searcher() as searcher:
query = QueryParser("content", ix.schema).parse(u"ship")
results = searcher.search(query)
我读到with语句执行__ enter__和__ exit__方法,它们在“with file_pointer:”或“with lock:”形式中非常有用。但没有任何文献能够启发。当在“with”形式和传统形式之间进行翻译(是的,它是主观的)时,各种例子都显示出不一致。
请解释
后记
关于http://effbot.org/zone/python-with-statement.htm的文章有最好的解释。当我滚动到页面底部并看到熟悉的文件操作时,一切都变得清晰了。 https://stackoverflow.com/users/190597/unutbu,希望你回答而不是评论。
答案 0 :(得分:9)
直接来自PEP-0343的示例:
with EXPR as VAR:
BLOCK
#translates to:
mgr = (EXPR)
exit = type(mgr).__exit__ # Not calling it yet
value = type(mgr).__enter__(mgr)
exc = True
try:
try:
VAR = value # Only if "as VAR" is present
BLOCK
except:
# The exceptional case is handled here
exc = False
if not exit(mgr, *sys.exc_info()):
raise
# The exception is swallowed if exit() returns true
finally:
# The normal and non-local-goto cases are handled here
if exc:
exit(mgr, None, None, None)
答案 1 :(得分:2)
阅读http://www.python.org/dev/peps/pep-0343/它解释了with语句的含义以及它以try .. finally
形式的外观。