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

Python编写无re、无main()的密码校验函数报TypeError如何解决

问题原因及修复方案

1 直接报错的根源:isdigit()方法传参错误

str.isdigit() 是字符串的内置无参方法,作用是判断单个字符是否为数字,你代码中char.isdigit(3) 多传入了参数3,直接触发了TypeError。
同时你要实现「至少3个数字」的校验,any()只能判断是否存在至少1个数字,无法统计数量,需要调整统计逻辑。

2 其他隐含的代码问题

  • 存在无意义的递归调用:函数末尾调用isValidPassword(pw)会在校验不通过时反复调用自身,最终触发递归深度超限错误
  • 返回值逻辑不全:仅当校验通过时返回True,校验不通过的场景没有返回值,会得到None而非预期的False

修正后的完整代码

def isValidPassword(pw):  
    SpecialSymbol = ["@", "#", "$", " ", "&", "%"]
    val = True   
    
    if len(pw) < 10:
        print("enter at least 10 characters")
        val = False
        
    # 统计数字的数量,判断是否≥3
    digit_count = sum(1 for char in pw if char.isdigit())
    if digit_count < 3:
        print("enter at least 3 digit numbers")
        val = False
        
    if not any(char.isupper() for char in pw):
        print("enter at least 1 uppercase letter")
        val = False
        
    if not any(char.islower() for char in pw):
        print("enter at least 1 lowercase letter")
        val = False
        
    if not any(char in SpecialSymbol for char in pw):
        print("enter at least 1 special character")
        val = False
    
    # 直接返回校验结果,不需要递归
    return val

# 测试调用
test_pw = "1234rewq"
result = isValidPassword(test_pw)
print(result)

运行测试说明

传入测试用例"1234rewq"时,会依次打印长度不足、没有大写字母、没有特殊字符的提示,最终返回False,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:06:00