Python循环未调用指定命令列表,误用触发指令问题排查
问题分析与修复方案
原代码核心问题
- 复用同一个
Command字典对象,由于字典是引用类型,每次往Commands列表追加的都是同一引用,输入新命令时会覆盖列表中所有旧命令的内容 - 输入
Done后先执行Command.clear(),直接清空了Commands列表内的所有元素(因为指向同一引用),导致后续遍历执行时无命令可运行
修复后的代码
import time import keyboard Commands = [] while True: # 每次输入都创建新字典,避免引用复用 raw_cmd = input("Command? ") times = int(input("How many times? (NUMBER!!) ")) if raw_cmd == "Done": # 遍历命令列表执行操作 for cmd in Commands: cmd_name = cmd["RawCommand"] remaining = cmd["Times"] while remaining > 0: if cmd_name == "Walk": keyboard.press("W") time.sleep(0.25) keyboard.release('W') elif cmd_name == "Jump": keyboard.press(" ") time.sleep(0.04) keyboard.release(' ') remaining -= 1 # 执行完成后清空列表,准备下一轮输入 Commands.clear() else: # 以新字典形式存入命令列表 Commands.append({"RawCommand": raw_cmd, "Times": times}) print(Commands)
关键修复点
- 每次输入命令时创建独立的字典对象,确保列表中每个命令都是独立个体
- 移除
Command.clear()的错误操作,避免提前清空待执行命令 - 用
elif替代重复if,避免多命令条件误触发 - 拆分变量,让逻辑更清晰易读
内容的提问来源于stack exchange,提问作者Zane Sites
相关产品推荐
相关产品推荐

