2013-07-02 29 views
2

我有几种方法可以引发我的自定义异常。在引发异常之后,我需要处理它,让我们说日志消息到控制台并保存到数据库中。在引发的异常中执行自定义代码

我正在考虑在帖子标题中描述的一个疯狂的解决方法 - 我可以将自定义代码与日志记录和DB保存到__init__我的自定义异常的方法,所以每次引发异常,我只是沉默它,因为所有需要的东西都会在异常初始化时完成。

我所知道的是,除了__init__本身也提出了另一个例外,但可以过处理:)

有没有人试过?

为什么它是疯狂的想法? :)

-

编辑:

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

我正在使用远程数据,并且在通过网络与其他服务器通信时,可能会出现一些问题,每个人都在其他某个地方: 1.网络错误 - 启用创建连接。 2. HTTP错误(404,500等) - 连接后; 3.远程服务器可以返回一些其他错误太

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

class CustomException(Exception): 
    pass 

到处提高了,我什么时候才能赶上他们,例如:

try: 
    conn.open(url) 
except HTTPException as e: 
    raise CustomException('http') 

这只是一个伪示例。

这CustomException被逮住somewher更高,几乎在每一个地方,我处理这个同样的方式,即:

try: 
    place.populate() 
except CustomException as e: 
    handle_exception(e) 
    return False 

而且handle_exception保存有关问题的数据库信息,做其他的事情也想节省place的对象状态和acccess日期,但始终更新相同的东西。

所以我只是想知道如果把handle_exception代码放在__init__之内会是一个非常疯狂的想法,因为每当出现异常时都会这样做。

感谢您的意见!

+3

你有没有一个例子。你失去了我...... – RickyA

+2

你可以在自定义异常的__init__内部进行日志记录和DB保存。但我不认为这是我们应该这样做的方式。通常在一个大项目中写这样的代码会让你自己和其他工作的人无法读取代码。 –

+2

你为什么要将异常处理打包到异常对象中?如果你想触发一些日志记录,只需触发一些日志记录而不会出现异常。例外情况应该用于“特殊”情况。如果你不把它看作是一个例外,那么没有理由让它成为例外。 –

回答

1

看起来你似乎在暗示两件独立的事情。首先,在异常中有一些自定义代码的想法,这远非疯狂并且非常可行。

例子:

class CustomException(Exception): 
    def __init__(self, message, Errors): 
     # do stuff here 

不过,你提到自动捕捉每一个它的提出时间除外。没有完成的原因很简单,如果它不是一个错误,那么不要将它作为例外。我很难想象如果你不打算在任何时候用它做任何事情,那么就有任何理由让一个类变成一个例外。

个人,如果你想在抛出一个异常(有点硬不知道您的具体目标,对此置评),我建议把一个记录器在__init__方法实质性逻辑,然后把你的逻辑直接在try/except这是毕竟,正是他们的目的。

1

如果你是做这样的事情,这正如其他人所说是一个值得怀疑的目标,我建议你异常的__init__,然后安装logging.Handlers用于登录到数据库,印刷到路由通过logging.Logger消息控制台,或任何你想要的。然后,您的库的用户可以更容易,更标准化的方式控制(并扩展)系统。

+0

谢谢,我知道这一点,但我也在做其他事情,比如更新对象状态等。 – aherok

相关问题