我在这里使用的编程模式是如何调用的(以简化字典访问期间的错误处理)?

2024-10-01 11:36:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从python中的JSON输入读取值,该输入中可能缺少任何键或值。我围绕Python的内置dict编写了这个包装器,以便在JSON输入缺少键或值时更容易处理错误。你知道吗

class DictAccessor:

    def __init__(self, to_access: Optional[Dict[Any, Any]]):
        self._payload = to_access

    def access(self, key: Any) -> "DictAccessor":
        if isinstance(self._payload, dict):
            return DictAccessor(self._payload.get(key))
        return DictAccessor(None)

    def get_value(self) -> Any:
        return self._payload

    def handle_error(self, err_callable: Callable[[None], None]) -> "DictAccessor":
        if self._payload is None:
            err_callable()
        return self

    def type_check(self, the_type) -> "DictAccessor":
        if not isinstance(self._payload, the_type):
            return DictAccessor(None)
        return self


d = json.loads('{"a":{"c":42},"x":"x"}')

should_be_the_answer = DictAccessor(d)\
    .access("a")\
    .access("c")\
    .type_check(int)\
    .handle_error(lambda : print("err"))\
    .get_value()

我知道这是我在其他地方看到的一些设计模式(我认为与函数式编程有关)。但是,我记不起这个名字了。这段代码不仅仅是链接(函数调用)。这里也有一种可能的想法,但它也不能完全描述模式。你知道吗

可能还有一个变量,get\u值如下所示

    def get_value(self, value_callback: Callable[[Any], None]) -> "DictAccessor":
        value_callback(self._payload)
        return self

在一系列操作或访问中,如果每个操作或访问都可能失败,那么如何调用这种处理错误的模式呢?你知道吗


Tags: theselfnonejsongetreturnifaccess