Python密码生成器如何实现输入非法时自动重跑脚本
实现方法
不需要在校验失败时退出脚本,直接用while True无限循环包裹输入、校验逻辑,即可实现输入不合法时自动引导用户重新输入,校验全通过后再执行后续密码生成流程。
原代码可优化点
- 输入逻辑仅执行1次,校验失败直接终止程序,无法重输
- 重复多次判断
pass_length.isnumeric(),逻辑冗余 - 长度校验、输入校验拆分零散,维护成本高
- 密码生成函数直接依赖全局字符串变量,没有显式传参,逻辑耦合
调整后完整代码
import random import sys print("Password Generator") print("* Attention: - You may not generate a password with more than 70 characters\n" " - You may not enter letters") characters = "abcdefghijklmnopqrstuvwxyz" \ "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*" def password_gen_start(pwd_len): password = "".join(random.sample(characters, pwd_len)) print("Your password has been generated: " + password) # 循环处理输入校验 while True: pass_length = input("Enter your password length: ") # 校验是否为纯数字 if not pass_length.isnumeric(): print("Natural numbers only!") continue pwd_len = int(pass_length) # 校验长度上限 if pwd_len >= 71: print("Password cannot be longer than 70 characters!") continue # 所有校验通过,跳出循环 break # 生成密码 password_gen_start(pwd_len)
关键逻辑说明
- 校验不通过时,不需要调用
sys.exit()终止程序,打印错误提示后执行continue即可直接回到循环开头,重新展示输入提示 - 所有校验规则全部收拢在循环内,不需要重复做类型转换、格式判断,代码更简洁
- 所有校验通过后执行
break跳出输入循环,再执行密码生成逻辑,流程清晰
内容的提问来源于stack exchange,提问作者Phạm Đức Tuấn
相关产品推荐
相关产品推荐

