You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写校验指定结构字典值合法性的Python函数

IsValid 校验函数实现

你可以按优先级逐层校验每一个字段的规则,只要任意条件不满足就立即返回False,避免后续访问不存在的键触发异常,具体实现如下:

def IsValid(data):
    # 第一步:校验输入本身是字典,且包含3个必填顶级键
    if not isinstance(data, dict):
        return False
    required_top_keys = {'name', 'pass', 'rule'}
    if not required_top_keys.issubset(data.keys()):
        return False
    
    # 第二步:校验name、pass字段的规则
    name_val = data['name']
    pass_val = data['pass']
    if not (isinstance(name_val, str) and len(name_val) > 1):
        return False
    if not (isinstance(pass_val, str) and len(pass_val) > 1):
        return False
    
    # 第三步:校验rule字段的结构
    rule_val = data['rule']
    if not isinstance(rule_val, dict):
        return False
    required_rule_keys = {'vals', 'char'}
    if not required_rule_keys.issubset(rule_val.keys()):
        return False
    
    # 第四步:校验rule下vals的规则
    vals_val = rule_val['vals']
    if not isinstance(vals_val, tuple) or len(vals_val) != 2:
        return False
    if not (isinstance(vals_val[0], int) and vals_val[0] > 0 and isinstance(vals_val[1], int) and vals_val[1] > 0):
        return False
    
    # 第五步:校验rule下char的规则
    char_val = rule_val['char']
    if not (isinstance(char_val, str) and len(char_val) == 1 and char_val.islower()):
        return False
    
    # 所有规则都满足
    return True

校验逻辑说明

  • 访问顶级字典键时直接通过data['键名']获取值,只有提前校验过键存在才会执行后续取值操作,不会触发KeyError
  • 每个字段的校验严格对应规则要求:
    • 字符串类型用isinstance(值, str)判断,长度用len()校验
    • 元组类型用isinstance(值, tuple)判断,长度限制为2后逐一校验元素为正整数
    • 单个小写字母用len(值) == 1和str.islower()方法联合校验

测试效果

# 示例1 返回True
print(IsValid({'name':'john.d', 'pass':'aabcde', 'rule':{'vals':(2,4), 'char':'a'}}))
# 示例2 返回False
print(IsValid({'name':'john.d', 'pass':'aabcde', 'rule':{'vals':1, 'char':'a'}}))

内容的提问来源于stack exchange,提问作者Cate C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:45:10