为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

收到一只叮咚 2021-11-16 14:51:39
我正在重构一个“大”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 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

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


for key in ('name', 'type', 'of'):

    if key not in item:

        error = "no {} key found in definition".format(key)

        return False, error, {}


查看完整回答
反对 回复 2021-11-16
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

好吧,这段代码可以重构以避免像这样重复:


for part in ['name', 'type', 'of']:

    if part not in item:

        error = "no {} key found in definition".format(part)

        return False, error, {}

不确定我是否可以添加很多关于 Python 中一般验证的最佳实践。我认为使用这样的通用结构几乎可以根据需要完成。


查看完整回答
反对 回复 2021-11-16
?
莫回无

TA贡献1865条经验 获得超7个赞

如果您明确命名丢失的键而不是执行类似的操作


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, {}

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


查看完整回答
反对 回复 2021-11-16
  • 3 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信