python項(xiàng)目中出現(xiàn)上下文管理器異常如何解決?針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
1、異常說明
異??梢栽赺_exit__ 進(jìn)行捕獲并由你自己決定如何處理,是拋出還是不拋出。在__exit__ 里返回 True(沒有return 就默認(rèn)為 return False),就相當(dāng)于告訴 Python解釋器,這個(gè)異常我們已經(jīng)捕獲了,不需要再往外拋了。
在 寫__exit__ 函數(shù)時(shí),需要注意的事,它必須要有這三個(gè)參數(shù):
exc_type:異常類型
exc_val:異常值
exc_tb:異常的錯(cuò)誤棧信息
當(dāng)主邏輯代碼沒有報(bào)異常時(shí),這三個(gè)參數(shù)將都為None。
如果我們需要對(duì)異常做特殊處理,就可以在這個(gè)方法中實(shí)現(xiàn)自定義邏輯。
之所以 with 能夠自動(dòng)關(guān)閉文件資源,就是因?yàn)閮?nèi)置的文件對(duì)象實(shí)現(xiàn)了上下文管理器協(xié)議,這個(gè)文件對(duì)象的 __enter__ 方法返回了文件句柄,并且在 __exit__ 中實(shí)現(xiàn)了文件資源的關(guān)閉,另外,當(dāng) with 語(yǔ)法塊內(nèi)有異常發(fā)生時(shí),會(huì)拋出異常給調(diào)用者。
class File: def __enter__(self): return file_obj def __exit__(self, exc_type, exc_value, exc_tb): # with 退出時(shí)釋放文件資源 file_obj.close() # 如果 with 內(nèi)有異常發(fā)生 拋出異常 if exc_type is not None: raise exception
在__exit__方法中處理異常實(shí)例擴(kuò)展:
class File(object): def __init__(self, file_name, method): self.file_obj = open(file_name, method) def __enter__(self): return self.file_obj def __exit__(self, type, value, traceback): print("Exception has been handled") self.file_obj.close() return True with File('demo.txt', 'w') as opened_file: opened_file.undefined_function() # Output: Exception has been handled
關(guān)于python項(xiàng)目中出現(xiàn)上下文管理器異常如何解決問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
網(wǎng)站題目:python項(xiàng)目中出現(xiàn)上下文管理器異常如何解決-創(chuàng)新互聯(lián)
分享鏈接:http://www.ekvhdxd.cn/article6/cessog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、全網(wǎng)營(yíng)銷推廣、Google、靜態(tài)網(wǎng)站、品牌網(wǎng)站制作、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容