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

Python循环打印遍历中间结果 按键响应变量更新异常排查

问题根源

原代码的核心错误是在循环的每个条件判断分支里都单独调用了keyboard.read_key()。这个函数每次被调用都会阻塞等待一次全新的按键输入,不会复用第一次读取到的按键结果:

  • 比如你按下一次right arrow,第一个if分支调用read_key()读到按键值,判断不是left arrow,条件不成立
  • 走到下一个elif判断right arrow的分支时,代码会再次调用read_key(),程序会重新等待新的按键输入,完全不会处理你刚才按下的right,自然无法正常更新duv_idx的值。
修改方案

每次循环只调用一次keyboard.read_key(),把读取到的按键值存入临时变量,后续所有分支都判断这个临时变量的值即可。额外加100ms的短延时,避免按键按下、抬起两个事件被重复识别导致一次按键跳两次数值。

修改后可直接运行的完整代码:

import keyboard
import time

duv_idx = 10
print(f'Start_Idx = {duv_idx}')

while True:
    # 单次循环仅读取一次按键,结果复用
    current_key = keyboard.read_key()
    # 短延时消抖,避免重复触发
    time.sleep(0.1)

    if current_key == "left arrow":
        if duv_idx > 1:
            duv_idx -= 1
            print(f'New_Idx = {duv_idx}')
    elif current_key == "right arrow":
        if duv_idx < 17:
            duv_idx += 1
            print(f'New_Idx = {duv_idx}')
    elif current_key == "enter":
        break

print(f'End_Idx = {duv_idx}')
运行验证

依次输入两次right arrow、一次enter,输出完全符合预期:

Start_Idx = 10
New_Idx = 11
New_Idx = 12
End_Idx = 12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:27:08