Python 在引发的异常中执行自定义代码

Python 在引发的异常中执行自定义代码,python,Python,我有几个方法可以引发我的自定义异常。在引发异常之后,我需要处理它,比如说将消息记录到控制台并将其保存到数据库中 我在考虑一个在文章标题中描述的疯狂的解决方法-我可以将带有日志记录和DB保存的自定义代码移动到自定义异常的\uuuuu init\uuuuu方法中,因此每次引发异常时,我都会将其静音,因为所有需要的工作都将在异常初始化时完成 我知道异常\uuuu init\uuuu本身可能引发另一个异常,但这也可以处理:) 有人试过吗 为什么这是一个疯狂的想法?:) - 编辑: 我知道这有点疯狂,我只

我有几个方法可以引发我的自定义异常。在引发异常之后,我需要处理它,比如说将消息记录到控制台并将其保存到数据库中

我在考虑一个在文章标题中描述的疯狂的解决方法-我可以将带有日志记录和DB保存的自定义代码移动到自定义异常的
\uuuuu init\uuuuu
方法中,因此每次引发异常时,我都会将其静音,因为所有需要的工作都将在异常初始化时完成

我知道异常
\uuuu init\uuuu
本身可能引发另一个异常,但这也可以处理:)

有人试过吗

为什么这是一个疯狂的想法?:)

-

编辑: 我知道这有点疯狂,我只是好奇你的意见。我将尝试附上我想要实现的目标:

我正在处理远程数据,当通过网络与其他服务器通信时,可能会出现一些问题,每个问题都发生在其他地方: 1.网络错误-创建连接时出错。 2.HTTP错误(404500等)-连接后; 3.远程服务器也可能返回一些其他错误

由于这些问题发生在几个不同的地方,我创建了自定义异常:

class CustomException(Exception):
    pass
当我能抓住它们的时候,到处举起它,例如:

try:
    conn.open(url)
except HTTPException as e:
    raise CustomException('http')
这只是一个伪例子

此CustomException在更高的级别被发现,我几乎在每个地方都以相同的方式处理此问题,即:

try:
     place.populate()
except CustomException as e:
     handle_exception(e)
     return False
handle\u exception
将有关问题的信息保存到数据库,执行其他操作,如保存
place
的对象状态和访问日期,但始终更新相同的内容

所以我只是想知道,如果将
句柄\u异常
代码放在
\uuuu init\uuuuu
中,这是否真的是一个疯狂的想法,因为每次引发异常时都会这样做


谢谢你的意见

你似乎在建议两件不同的事情。首先,有一个想法,就是在异常中包含一些自定义代码,这一点都不疯狂,而且是可行的

例如:

class CustomException(Exception):
    def __init__(self, message, Errors):
        # do stuff here
但是,您提到了在每次引发异常时自动捕获异常。没有这样做的原因很简单,如果这不是一个错误,那么就不要把它作为例外。我很难想象,如果你不打算在任何时候用类做任何事情,那么有任何理由让类成为例外


就个人而言,如果你想在引发异常时有实质性的逻辑(在不知道你的特定目标的情况下对此进行评论有点困难),我建议在
\uuuu init\uuuu
方法中放置一个记录器,然后直接将逻辑放入
try/except,毕竟,这正是它们的用途。

如果你要做这样的事情,正如其他人所说,这是一个值得怀疑的目标,我建议通过你的异常的
\uuuuuu init\uuuuu
中的a来路由消息,然后附加到数据库日志,打印到控制台,或者你想要的任何东西。然后,您的库的用户可以以更简单、更标准化的方式控制(和扩展)系统。

您有例子吗。你弄丢了我…你可以在自定义异常的init中进行日志记录和数据库保存。但我认为我们不应该这样做。通常情况下,在大型项目中这样编写代码会使您自己和其他工作人员无法读取代码。为什么要将异常处理打包到异常对象中?如果您想触发一些日志记录,只需在没有异常的情况下触发一些日志记录即可。例外情况应用于“例外”情况。如果你没有将其视为异常,那么就没有理由将其视为异常。谢谢你的评论,我在上面更新了我的示例谢谢,我知道这一点,但我也在做其他事情,比如更新对象状态等。