如何简化“现代”python 中的验证检查?

我正在重构一个“大”python 类,并且我正在尝试减少重复以使代码更短且更具可读性。


if 'name' not in item:

    error = "no name key found in definition"

    return False, error, {}


if 'type' not in item:

    error = "no type key found in definition"

    return False, error, {}


if 'of' not in item:

    error = "no of key found in definition"

    return False, error, {}

基本上,我已将我的 json 输入转换为字典,并且我正在查看是否存在相同的特定元素。如果输入中未出现键,则该函数返回 False、信息消息和空字典。


我可以创建一个接受参数名称并评估存在的类方法,但是我想知道在 python 3.x 中是否有更好的方法来做到这一点


收到一只叮咚
浏览 178回答 3
3回答

慕姐4208626

您可以使用循环和字符串插值将其减少为:for key in ('name', 'type', 'of'):    if key not in item:        error = "no {} key found in definition".format(key)        return False, error, {}

白衣染霜花

好吧,这段代码可以重构以避免像这样重复:for part in ['name', 'type', 'of']:    if part not in item:        error = "no {} key found in definition".format(part)        return False, error, {}不确定我是否可以添加很多关于 Python 中一般验证的最佳实践。我认为使用这样的通用结构几乎可以根据需要完成。

莫回无

如果您明确命名丢失的键而不是执行类似的操作if "name" not in item or "type" not in item or "of" not in item:    return False, "key missing in definition", {}你可能应该做对并遍历所有这些。调整 Dan D. 的解决方案:error = ''for key in ('name', 'type', 'of'):    if key not in item:        error += " no {} key found in definition".format(key)if error != ''    return False, error, {}或者类似的东西。如果缺少名称和类型怎么办?您只会在示例中看到缺少的名称。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python