場景:簡化try-except-finally添瓷,從流程圖中把try, except和finally處理資源分配每庆、釋放的相關(guān)代碼去掉,比如處理文件(數(shù)據(jù)鹅经、日志寂呛、數(shù)據(jù)庫等)、線程資源瘾晃、簡單同步贷痪、數(shù)據(jù)庫連接等。只適合工作于支持『上下文管理協(xié)議』的對象酗捌,所以只有內(nèi)建了『上下文管理』的對象可以和with一起工作呢诬。
支持上下文管理協(xié)議的對象有:file, decimal.Context, thread.LockType, threading.Lock,threading.RLock, threading.Condition等,最常用的應(yīng)該是file胖缤。
舉個栗子:
with open('/home/work/myfile.txt', 'r') as f: ??
? ? for line in f:
? ? ? ? print line
打開文件尚镰,如果一切正常,把文件對象賦值給f哪廓,然后迭代輸出文件中的每一行狗唉,當(dāng)完成時,關(guān)閉文件涡真。如果開始/中間/結(jié)束發(fā)生任何異常分俯,會執(zhí)行清理代碼肾筐,文件會自動關(guān)閉。