擅长:python、mysql、java
<p>这个问题</p>
<pre><code>for line in open('data.txt'):
# etc
</code></pre>
<p>是不是没有对打开的文件进行显式引用,那么如何关闭它?
懒惰的方法是等待垃圾收集器清理它,但这可能意味着资源没有及时释放。</p>
<p>所以你可以说</p>
<pre><code>inf = open('data.txt')
for line in inf:
# etc
inf.close()
</code></pre>
<p>如果在for循环中出现异常,会发生什么情况?文件不会被显式关闭。</p>
<p>添加<code>try/finally</code></p>
<pre><code>inf = open('data.txt')
try:
for line in inf:
# etc
finally:
inf.close()
</code></pre>
<p>这是很多代码来做一些非常简单的事情,所以Python添加了<code>with</code>,使这段代码能够以更可读的方式编写。把我们带到这里</p>
<pre><code>with open('data.txt') as inf:
for line in inf:
#etc
</code></pre>
<p>所以,这是打开文件的首选方法。如果您的Python对于with语句来说太旧,那么您应该使用<code>try/finally</code>版本来生成代码</p>