open()和with open() as的區別
阿新 • • 發佈:2019-01-09
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