Python自动重复输入脚本报list index out of range错误如何解决
问题修复方案
错误根因
你触发list index out of range报错的核心原因是遍历下标和列表长度不匹配,同时存在缩进逻辑错误:
- 你给
length变量赋值的是原输入字符串keys的字符总长度,但你遍历的是按空格分割后的列表keyslist,两者的长度完全不一致:比如输入hello world,原字符串长度是11,分割后的列表长度只有2,当循环变量i超过列表最大下标时就会触发索引越界。 - 代码里第一个
while True是死循环,仅包含退出检测逻辑,后面的自动输入代码永远不会被执行,属于缩进错误。
另外需要先确认你的需求:是要按空格分割输入的按键名依次触发(比如输入a b enter对应按a、按b、按回车),还是要逐字符输入整段普通文本,两种场景的修复逻辑略有不同。
场景1:按空格分割的按键名依次触发
修复步骤
- 将
length的取值改为分割后的列表长度:length = len(keyslist) - 调整缩进,把自动输入的逻辑放到
while True循环内部,保证重复输入的功能正常运行 - 补充导入缺失的
keyboard、time依赖库,把split(' ')改为无参数的split(),避免连续空格生成空字符串元素导致多余输入 - 退出前调用
keyboard.unhook_all()释放按键监听,避免卡键
修复后代码
import keyboard import time def selection(): # 此处补充你自己原本的selection函数实现 pass keys = input('Enter sentence to repeat type: ') try: keyslist = keys.split() length = len(keyslist) while True: if keyboard.is_pressed('`'): keyboard.unhook_all() quit() i = 0 while i < length: keyboard.press(keyslist[i]) i = i + 1 time.sleep(0.01) time.sleep(0.08) except Exception as exp: print(exp) selection()
场景2:逐字符输入整段普通文本
不需要做分割处理,直接遍历原输入字符串即可,修复后代码如下:
import keyboard import time def selection(): pass keys = input('Enter sentence to repeat type: ') try: length = len(keys) while True: if keyboard.is_pressed('`'): keyboard.unhook_all() quit() i = 0 while i < length: keyboard.press(keys[i]) i = i + 1 time.sleep(0.01) time.sleep(0.08) except Exception as exp: print(exp) selection()
内容的提问来源于stack exchange,提问作者intermediate coder
相关产品推荐
相关产品推荐

