使用kwargs的自定义异常(Python)

时间:2013-08-07 16:16:08

标签: python exception

这样安全吗?

class SpecialAlert(Exception):

    def __init__(self, message, **kwargs):
        Exception.__init__(self, message)
        for kw in kwargs:
            if kw == 'message':
                continue
            setattr(self, kw, kwargs[kw])

相关:Proper way to declare custom exceptions in modern Python?

对接..这样安全吗?我的意思是我压倒自我的属性?

在SpecialAlert中我想传递各种各样的东西(这是做了一系列不同检查的例外,我在循环中“try..except SpecialAlert as error”然后在错误中获取详细信息处理程序)

我有一个基本的检查,如果我没有覆盖“消息”,我是否应该跳过设置自己的其他attrs?它们是什么?

2 个答案:

答案 0 :(得分:4)

这样可以正常工作;将额外的属性放在对象上是完全可靠的。但是,不要专门检查标准属性,而不是想要破坏,只需最后调用Exception.__init__,如果你不小心设置它们就让它破坏你的。那么您的__init__()可以是:

def __init__(self, message, **kwargs):
    self.__dict__.update(kwargs)
    Exception.__init__(self, message)

答案 1 :(得分:2)

这非常安全,您可以在自定义异常实例上分配其他属性,只要它不是.args

标准库中的大量自定义异常子类也是如此。例如,urllib2.HTTPError例外会添加codemsgheadersfpfilename属性。