8

这安全吗?

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])

相关:在现代 Python 中声明自定义异常的正确方法?

屁股..这安全吗?我的意思是我正在覆盖自我的属性?

在 SpecialAlert 中,我想传递各种东西(这是为进行一系列不同检查而完成的异常,我在循环中执行“try..except SpecialAlert as error”,然后从处理程序中的错误中获取详细信息)

如果我没有覆盖“消息”,我有一个基本检查,我是否也应该跳过在 self 上设置其他属性?这些是什么?

4

2 回答 2

8

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

def __init__(self, message, **kwargs):
    self.__dict__.update(kwargs)
    Exception.__init__(self, message)
于 2013-08-07T16:24:46.890 回答
3

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

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

于 2013-08-07T16:22:27.973 回答