Python上下文管理器
2023-08-22 14:04 作者:韭菜怎么賣(mài) | 我要投稿
????首先造一個(gè)傳統(tǒng)意義上的上下文管理器:
????它其實(shí)有個(gè)等價(jià)寫(xiě)法:
????也就是說(shuō),以下兩種寫(xiě)法都能實(shí)現(xiàn)上下文管理:
????唯一的區(qū)別就是,如果使用 contextmanager 制作裝飾器類(lèi)型的上下文管理器,當(dāng)你的代執(zhí)行內(nèi)容報(bào)錯(cuò)的時(shí)候,yield處是沒(méi)有處理錯(cuò)誤邏輯的代碼的。也就是使用 @TimerContextManager() 會(huì)在拋出 TypeError 后打印出 cost_time,但是使用 @contextmanager 的 @timer() 不會(huì)拋出。
????如果你希望它拋出,需要加一個(gè)異常處理:
????你也可以選擇不拋出錯(cuò)誤而是記錄一個(gè) message,最終定制錯(cuò)誤類(lèi)型并且將這個(gè) message打印/日記記錄出來(lái)。怎么操作是你的事情。
????這個(gè)東西很好用,你可以用它來(lái)做異步爬蟲(chóng) session、數(shù)據(jù)庫(kù)連接池、日志工具。