亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

覆蓋類提供的異常處理程序

覆蓋類提供的異常處理程序

慕田峪7331174 2022-06-02 15:13:16
我在這方面找不到太多東西,但我也不知道如何搜索它,所以如果這是重復的,我深表歉意。目前,我有大量代碼,偶爾會出現 mySQL 查詢。有時,由于某種原因,mySQL 連接(在程序啟動時實例化并可供想要使用它的方法訪問,因此不會不斷建立新連接)會失敗。例如,這是一個可能引發的異常: mysql.connector.errors.OperationalError: MySQL Connection not available.當引發異常時,我希望程序嘗試重新建立與數據庫的連接,如果失敗,發送警報(通過 OpsGenie、電子郵件等)。這是非常微不足道的,而不是我正在努力的部分。現在,我在整個程序中都在考慮如何做到這一點,并且我知道我可以將每個 mySQL 查詢語句包裝在一個 try...catch... 中,但是我覺得這可能會很混亂且效率低下。我想知道是否有一種方法可以:覆蓋 mySQL 包中的異常處理程序以包含執行上述操作的代碼,或者創建一些“全局” try...catch... 語句(實際上沒有將整個程序包裝在 try...catch... 中),它將捕獲任何 mySQL 連接異常并按上述方式處理它們(可能與方法裝飾器?)哪個更有效或更合適(如果有的話)。洞察力和想法非常感謝。注意:我在這個項目中使用 Python 3。更新以下是我解決此問題的方法:#methoddef getNewCursor():    try:        return(db.cursor())    except OperationalError:        #handle error...#in practicecur = getNewCursor()cur.execute("...the SQL query...")... etc我這樣做而不是創建一個方法來處理整個查詢,以便我可以獲取一個游標對象并根據需要使用它,因為創建新游標時會出現連接錯誤。
查看完整描述

1 回答

?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

覆蓋 mySQL 包中的異常處理程序以包含執行上述操作的代碼,或者


我不會那樣做的。這可能會對代碼的其他部分甚至您正在使用/可能使用的第 3 方庫造成副作用。


創建某種“全局” try...catch... 語句(


我寧愿那樣做。這似乎更易于維護且不易出錯。



def run_sql(self, query, retry_times=3):

    try:

        # logic to run the query

    except OperationalError:

        if max_retries:

            send_notification(query)

            raise

        else:

            # logic to run the query again and decrements the max_retries counter


查看完整回答
反對 回復 2022-06-02
  • 1 回答
  • 0 關注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號