我正试图理解这两者之间的取舍/区别 打开文件进行逐行处理的方法
with open('data.txt') as inf:
for line in inf:
#etc
对
for line in open('data.txt'):
# etc
我知道使用with
可以确保在
“带座”(套房?)已退出(或已取消异常)。所以自从我在这里了解到它以来,我一直在使用with
。
Refor
循环:从搜索网络等方面来看,文件是否
当for
循环退出时是否关闭-依赖于实现?以及
我找不到任何关于这个结构将如何处理的信息
例外情况。有人知道吗?
如果我在上面的任何地方弄错了,我会感激你的改正,
否则,是否有理由在
with
?(假设您有选择,即不受Python版本的限制)
这个问题
是不是没有对打开的文件进行显式引用,那么如何关闭它? 懒惰的方法是等待垃圾收集器清理它,但这可能意味着资源没有及时释放。
所以你可以说
如果在for循环中出现异常,会发生什么情况?文件不会被显式关闭。
添加
try/finally
这是很多代码来做一些非常简单的事情,所以Python添加了
with
,使这段代码能够以更可读的方式编写。把我们带到这里所以,这是打开文件的首选方法。如果您的Python对于with语句来说太旧,那么您应该使用
try/finally
版本来生成代码with语句仅在Python2.5中引入—仅当您对早期版本有向后兼容性要求时才应使用后者。
更清晰一点
引入with语句(如您所知)是为了包含try/except/finally系统——这不太好理解,但可以。在Python(C中的Python)中,它的实现将关闭打开的文件。语言本身的规范,并没有说。。。所以伊普顿,杰普顿等等。。。可以选择在下一个GC周期之前保持文件打开、内存打开,或者不释放资源(或者根本不释放,但是CPython GC与.NET或Java GC不同…)。
我认为我听到的唯一反对它的声音是,它增加了另一个缩进级别。
因此总结一下:woll't work<;2.5引入了“as”关键字并添加了缩进级别。
否则,您将保持正常处理异常的控制权,如果发生异常,finally块将关闭资源。
对我有用!
相关问题 更多 >
编程相关推荐