为了账号安全,请及时绑定邮箱和手机立即绑定

覆盖类提供的异常处理程序

覆盖类提供的异常处理程序

慕田峪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 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号