1. 程式人生 > >open()和with open() as的區別

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