Python报IndexError: list index out of range的原因及修复方法
错误原因
- 核心触发点:
random.randint(0, len(list))的取值范围包含了len(list)。Python中random.randint(a, b)返回的是闭区间[a, b]内的整数,而列表的合法索引范围是0 ~ len(列表)-1,当随机结果恰好等于len(list)时,访问list[rand]就会触发IndexError。由于随机数命中len(list)是概率事件,所以错误为偶发,和你观察到的现象一致。 - 额外不规范问题:使用Python内置类型名
list作为自定义变量名,会覆盖内置的list()函数,后续调用内置列表构造方法时会出现异常。
修复方案
有两种可选修复方式:
- 调整随机数上界:将
random.randint(0, len(list))修改为random.randint(0, len(list)-1),保证索引不越界 - 更简洁安全的写法:直接使用
random.choice()从目标列表中随机选取元素,不需要手动计算索引范围
修复后完整代码
import random inp = input('Enter: ') inp = str(inp) char = 0 key = [] # 修改变量名,避免覆盖内置list chars_pool = list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%&*?+-') if inp == 'New': while char < len(chars_pool): # 直接用choice无需处理索引,降低出错概率 key.append(random.choice(chars_pool)) char = char + 1 print(key)
内容的提问来源于stack exchange,提问作者Caleb Haywood
相关产品推荐
相关产品推荐

