open()和with open() as的区别

file = open("test.txt","r")
for line in file.readlines():
    print line
file.close()

这样直接打开文件,如果出现异常,如读取过程中文件不存在或异常,则直接出现错误,close方法无法执行,文件无法关闭

with open("test.txt","r") as file:
for line in file.readlines():
    print line

用with语句的好处,就是到达语句末尾时,会自动关闭文件,即便出现异常。

with语句实际上是一个非常通用的结构,允许你使用所谓的上下文管理器。上下文管理器是支持两个方法的对象:__enter__和__exit__。

方法__enter__不接受任何参数,在进入with语句时被调用,其返回值被赋给关键字as后面的变量。

方法__exit__接受三个参数:异常类型、异常对象和异常跟踪。它在离开方法时被调用(通过前述参数将引发的异常提供给它)。如果__exit__返回False,将抑制所有的异常。

文件也可用作上下文管理器。它们的方法__enter__返回文件对象本身,而方法__exit__关闭文件

file= open("test.txt","r")
try:
    for line in file.readlines():
        print line
except:
    print "error"
finally:
    file.close()

with语句作用效果相当于上面的try-except-finally

猜你喜欢

转载自blog.csdn.net/a1496785/article/details/83011974