Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 覆盖类提供的异常处理程序_Python_Mysql_Python 3.x_Oop_Exception - Fatal编程技术网

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

Python 覆盖类提供的异常处理程序,python,mysql,python-3.x,oop,exception,Python,Mysql,Python 3.x,Oop,Exception,我还没有找到太多关于这个,但我也不知道如何搜索它,所以我道歉,如果这是一个重复 目前,我有大量的代码,偶尔会有mySQL查询。有时,mySQL连接(在程序启动时被实例化,并且可以被想要使用它的方法访问,这样就不会经常建立新的连接)会由于某种原因而失败。例如,可能会引发以下异常: mysql.connector.errors.OperationalError:mysql连接不可用。 当引发异常时,我希望程序尝试重新建立与数据库的连接,如果失败,则发送警报(通过OpsGenie、电子邮件等)。这是相

我还没有找到太多关于这个,但我也不知道如何搜索它,所以我道歉,如果这是一个重复

目前,我有大量的代码,偶尔会有mySQL查询。有时,mySQL连接(在程序启动时被实例化,并且可以被想要使用它的方法访问,这样就不会经常建立新的连接)会由于某种原因而失败。例如,可能会引发以下异常:
mysql.connector.errors.OperationalError:mysql连接不可用。

当引发异常时,我希望程序尝试重新建立与数据库的连接,如果失败,则发送警报(通过OpsGenie、电子邮件等)。这是相当琐碎的,不是我正在挣扎的部分

现在,我考虑了如何在整个程序中实现这一点,我知道我可以将每个mySQL查询语句封装在一个try…catch…中,但我觉得这可能会很混乱,效率低下。我想知道是否有一种方法可以:

  • 覆盖mySQL包中的异常处理程序以包含执行上述操作的代码,或者
  • 创建一个“全球”尝试…捕获。。。语句(实际上没有将整个程序包装在try…catch…)中,该语句将捕获任何mySQL连接异常并按上述方式处理它们(可能使用方法装饰器?)
哪一个更有效或更合适(如果其中一个是)

非常感谢您的洞察力和想法

注意:我在这个项目中使用Python3

使现代化 我是这样解决这个问题的:

#方法
def getNewCursor():
尝试:
返回(db.cursor())
除操作错误外:
#处理错误。。。
#实际上
cur=getNewCursor()
cur.execute(“…SQL查询…”)
... 等
我这样做,而不是创建一个方法来处理整个查询,这样我就可以得到一个游标对象,并根据需要使用它,因为创建新游标时会出现连接错误

覆盖mySQL包中的异常处理程序以包含执行上述操作的代码,或者

我不会那么做的。这可能会对代码的其他部分甚至您正在使用/可能使用的第三方库产生副作用

创建一个“全球”尝试…捕获。。。声明(

我宁愿这样做。这似乎更易于维护,也不容易出错


def run_sql(自我、查询、重试次数=3):
尝试:
#运行查询的逻辑
除操作错误外:
如果最大重试次数:
发送通知(查询)
提升
其他:
#再次运行查询并递减最大重试次数计数器的逻辑

D'oh!我想我真的想得太多了。这是一个好主意,谢谢!您在覆盖包异常处理程序方面提出了一个很好的观点,我没有想到第三方库会因此而崩溃。