这样安全吗?
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?它们是什么?
答案 0 :(得分:4)
这样可以正常工作;将额外的属性放在对象上是完全可靠的。但是,不要专门检查标准属性,而不是想要破坏,只需最后调用Exception.__init__
,如果你不小心设置它们就让它破坏你的。那么您的__init__()
可以是:
def __init__(self, message, **kwargs):
self.__dict__.update(kwargs)
Exception.__init__(self, message)
答案 1 :(得分:2)
这非常安全,您可以在自定义异常实例上分配其他属性,只要它不是.args
。
标准库中的大量自定义异常子类也是如此。例如,urllib2.HTTPError
例外会添加code
,msg
,headers
,fp
和filename
属性。