我有 csv 读者和作家。我了解您必须打开和关闭底层对象。一种方法是首先创建文件对象 f,使用 csv 阅读器,然后使用 f.close()。
但是,我似乎无法执行以下操作:
with open(outputpath) as f_outputfile:
outputfile = csv.writer(f_outputfile)
OTHER CODE HERE
我想做的是一次打开一堆阅读器和一堆作者,然后让它们都自动关闭。但是,这是否意味着我有一个嵌套的“With”块?
写作:
with open(outputpath) as f_outputfile:
outputfile = csv.writer(f_outputfile)
OTHER CODE HERE
本质上是一样的:
f_outputfile = open(outputpath)
try:
outputfile = csv.writer(f_outputfile)
finally:
f_outputfile.close()
OTHER CODE HERE
如果OTHER CODE HERE
依赖于打开的文件,它将无法正常工作。
您可以在with 语句中堆叠多个项目,如下所示(看起来这是 2.7.x 及更高版本的功能):
with open(foo) as f_foo, open(bar) as f_bar:
# do something
7.5。with 语句
2.5 版中的新功能。
with 语句用于使用上下文管理器定义的方法包装块的执行(请参阅 With Statement Context Managers 部分)。这允许封装常见的 try...except...finally 使用模式以方便重用。
with_stmt ::= "with" with_item ("," with_item)* ":" suite
with_item ::= expression ["as" target]