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

Python随机密码生成器无法运行求助:Type Error报错排查

问题分析与修复

先拆解你代码里的核心错误:

  • 输入处理完全错误:
    • 你写X = int(len(input('Enter Your Choice Here: '))),比如用户输入1,len(input())结果是1,转成int还是1,后面判断X == '1'是int和字符串比较,永远不成立,所以X最后还是int类型的1,rand.choice(X)自然报错(int没有len()属性)。
    • Y的赋值同理,int(len(input(...)))拿到的是输入字符串的长度,不是你要的密码位数。
  • 生成密码的逻辑错误:最后一行print(rand.choice(X) in range(Y))是在做判断,完全不是生成指定长度密码的逻辑。
  • 冗余问题:导入的os和sys没用,hard字符集重复了str.ascii_uppercase(str.ascii_letters已经包含大小写字母)。

修复后的完整代码

import random as rand
import string as str

# UI界面
print('请选择新密码的难度等级:')
print('1. 简单 (仅小写字母)')
print('2. 中等 (大小写字母+数字)')
print('3. 困难 (大小写字母+数字+特殊符号)')

# 正确获取输入
X = int(input('请输入你的选择: '))
Y = int(input('请输入密码长度: '))

# 定义字符集,修复冗余问题
easy = str.ascii_lowercase
medium = str.ascii_lowercase + str.ascii_uppercase + str.digits
hard = str.ascii_letters + str.digits + str.punctuation

# 根据选择切换字符集,增加容错处理
if X == 1:
    char_set = easy
elif X == 2:
    char_set = medium
elif X == 3:
    char_set = hard
else:
    print('无效选择,默认使用简单模式')
    char_set = easy

# 生成指定长度的密码:循环Y次随机选字符,拼接成字符串
password = ''.join([rand.choice(char_set) for _ in range(Y)])
print(f'生成的密码是: {password}')

关键修复点

  • 移除了无用的os和sys导入
  • 直接将用户输入转为int,不再错误取输入字符串的长度
  • 用独立变量char_set存储字符集,避免覆盖选择变量X,逻辑更清晰
  • 修复了hard字符集的冗余定义
  • 用列表推导式循环生成指定长度的密码,这是生成随机密码的正确逻辑
  • 增加了无效选择的容错处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:12:20