生成并破解随机密码时遇NoneType无len()报错,求解决方案
问题解决:生成随机密码并破解的NoneType错误
问题根源
- 你的
nrndprint函数仅执行了print(k),没有返回生成的密码字符串。当你执行passwd = nrndprint(4)时,passwd被赋值为None(Python中无return语句的函数默认返回None)。 - 后续调用
crack_pass(passwd)时,len(argpass)尝试获取None的长度,触发object of type 'NoneType' has no len()错误。
修正代码
1. 修复密码生成函数
修改nrndprint,添加return语句返回生成的密码:
from random import choice from string import ascii_lowercase def nrndprint(n): k = ''.join(choice(ascii_lowercase) for i in range(n)) print(k) # 保留打印,方便查看生成的密码 return k # 新增返回语句
2. 完整运行代码
整合修正后的完整代码:
from random import choice from string import ascii_lowercase import itertools def nrndprint(n): k = ''.join(choice(ascii_lowercase) for i in range(n)) print(k) return k def crack_pass(argpass): alplist = list(map(chr, list(range(ord('a'), ord('z')+1)))) for combi in itertools.product(alplist, repeat=len(argpass)): if "".join(combi) == argpass: return combi return '-1' passwd = nrndprint(4) print(crack_pass(passwd))
运行结果
执行后输出与期望一致:
mqjz ('m', 'q', 'j', 'z')
内容的提问来源于stack exchange,提问作者Hazem Majeek
相关产品推荐
相关产品推荐

