创建一个dict和Exception的子类

问题描述 投票:1回答:1

对于Web应用程序,我想要一个可以提高的dict

from json import dumps

class RaiseableDict(dict, Exception): pass  # This won't work.

# I want this to work without change:

try:
    raise RaiseableDict(message='Some message text.')
except RaiseableDict as rd:
    rd['key'] = 'value'
    rd.update({'error_code': 42})
    dumps(rd)

我怎么能避免

TypeError: multiple bases have instance lay-out conflict

并且有一些可升级的dict式异常,可以直接进行JSON转储,而无需访问异常子类的特殊属性或必须使用json.dumpsdefault=参数?

python python-3.x subclassing
1个回答
0
投票

您是否可以简单地定义异常作为字典工作所需的方法,还可以定义异常的转储方法?

>>> import json
>>> class RaiseableDict(Exception):
    def __init__(self, message):
        self.message = message
        self._dict = {}
    def __setitem__(self, key, value):
        self._dict[key] = value
    def __getitem__(self, key):
        return self._dict[key]
    def update(self, other_dict):
        self._dict.update(other_dict)
    def dumps(self):
        return json.dumps(self._dict)


>>> try:
    raise RaiseableDict(message='Some message text.')
except RaiseableDict as rd:
    rd['key'] = 'value'
    rd.update({'error_code': 42})
    rd.dumps()


'{"key": "value", "error_code": 42}'
© www.soinside.com 2019 - 2024. All rights reserved.