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

时间:2019-02-22 08:39:10

标签: 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中是否有更好的方法

3 个答案:

答案 0 :(得分:1)

您可以使用循环和字符串插值将其减少为:

for key in ('name', 'type', 'of'):
    if key not in item:
        error = "no {} key found in definition".format(key)
        return False, error, {}

答案 1 :(得分:0)

好吧,可以对这段代码进行重构,以避免重复:

for part in ['name', 'type', 'of']:
    if part not in item:
        error = "no {} key found in definition".format(part)
        return False, error, {}

不确定我可以在Python中添加很多有关验证的最佳做法。我认为使用这样的通用构造几乎可以按需完成。

答案 2 :(得分:0)

如果您要明确命名丢失的密钥,而不是执行类似的操作

CTRL + Enter Executes

您可能应该做对并遍历所有对象。调整Dan D.的解决方案:

if "name" not in item or "type" not in item or "of" not in item:
    return False, "key missing in definition", {}

或类似的东西。如果缺少名称和类型怎么办?您只会在示例中看到缺少的姓名。

相关问题