Python的with...as...語句
阿新 • • 發佈:2019-02-10
Python的with...as的用法
__enter__()
<class 'int'>
sample: 1111111111
這個語法是用來代替傳統的try...finally語法的。
with EXPRESSION [ as VARIABLE] WITH-BLOCK基本思想是with所求值的物件必須有一個__enter__()方法,一個__exit__()方法。
緊跟with後面的語句被求值後,返回物件的__enter__()方法被呼叫,這個方法的返回值將被賦值給as後面的變數。當with後面的程式碼塊全部被執行完之後,將呼叫前面返回物件的__exit__()方法。例子:
使用with...as...的方式替換,修改後的程式碼是:f = open("D://report_data2.txt") try: data = f.read() except: print("讀取檔案失敗!") else: print(data) finally: f.close() # with...as... with open("D://report_data2.txt") as f: data = f.read() print(data)
with open("D://report_data2.txt") as f:
data = f.read()
print(data)
進一步說明:
執行結果為class Sample: def __enter__(self): print("__enter__()") return 1111111111 def __exit__(self, type, value, trace): print("__exit__()") # 例項化 with Sample() as s: print(type(s)) print("sample:", s)
__enter__()
<class 'int'>
sample: 1111111111
__exit__()
說明:
1. __enter__()方法被執行
2. __enter__()方法返回的值 - 這個例子中是int 1111111111,賦值給s變數
3. 執行程式碼塊,列印變數s的值為 11111111
4. __exit__()方法被呼叫with真正強大之處是它可以處理異常。可能你已經注意到Sample類的__exit__方法有三個引數- val, type 和 trace。這些引數在異常處理中相當有用。
收藏:https://www.ibm.com/developerworks/cn/opensource/os-cn-pythonwith/