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
相关产品推荐
相关产品推荐

