溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python項目中出現(xiàn)上下文管理器異常如何解決

發(fā)布時間:2021-02-08 11:59:22 來源:億速云 閱讀:342 作者:Leah 欄目:開發(fā)技術

python項目中出現(xiàn)上下文管理器異常如何解決?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

1、異常說明

異??梢栽赺_exit__ 進行捕獲并由你自己決定如何處理,是拋出還是不拋出。在__exit__ 里返回 True(沒有return 就默認為 return False),就相當于告訴 Python解釋器,這個異常我們已經(jīng)捕獲了,不需要再往外拋了。

2、參數(shù)

在 寫__exit__ 函數(shù)時,需要注意的事,它必須要有這三個參數(shù):

  • exc_type:異常類型

  • exc_val:異常值

  • exc_tb:異常的錯誤棧信息

當主邏輯代碼沒有報異常時,這三個參數(shù)將都為None。

3、異常實例

如果我們需要對異常做特殊處理,就可以在這個方法中實現(xiàn)自定義邏輯。

之所以 with 能夠自動關閉文件資源,就是因為內(nèi)置的文件對象實現(xiàn)了上下文管理器協(xié)議,這個文件對象的 __enter__ 方法返回了文件句柄,并且在 __exit__ 中實現(xiàn)了文件資源的關閉,另外,當 with 語法塊內(nèi)有異常發(fā)生時,會拋出異常給調(diào)用者。

class File:
 def __enter__(self):
  return file_obj
 def __exit__(self, exc_type, exc_value, exc_tb):
  # with 退出時釋放文件資源
  file_obj.close()
  # 如果 with 內(nèi)有異常發(fā)生 拋出異常
  if exc_type is not None:
   raise exception

在__exit__方法中處理異常實例擴展:

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

關于python項目中出現(xiàn)上下文管理器異常如何解決問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業(yè)資訊頻道了解更多相關知識。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI