pynput keyboard模块开发中按a键无法匹配if判断反而执行else的问题
异常原因
核心问题是 字符串匹配值和pynput的实际返回值不匹配:
pynput键盘监听器传给on_press回调的key参数是库封装的按键类对象,不是原生字符串。当你对它执行str(key)转换时,按下普通字符a得到的转换结果是"'a'"(外层带单引号的字符串),和你判断条件里写的无包裹值'a'并不相等,判断结果恒为False,因此直接进入else分支。
可以在回调函数开头加一行print(repr(key))验证:按下a键时实际打印的转换值就是"'a'",和预期的匹配值有明显差异。
修正实现
两种可正常生效的写法:
- 适配强转后的字符串格式,修改判断条件为匹配带单引号的结果:
from pynput.keyboard import Key, Listener def show(key): key = str(key) if key == "'a'": print('you pressed a') else: print('not working') with Listener(on_press = show) as listener: listener.join() - 更稳定的通用写法:跳过容易出兼容问题的字符串强转,直接读取按键对象的
char属性判断,同时通过属性存在性判断兼容无字符的功能按键,避免访问属性时报错:from pynput.keyboard import Key, Listener def show(key): if hasattr(key, 'char') and key.char == 'a': print('you pressed a') else: print('not working') with Listener(on_press = show) as listener: listener.join()
内容的提问来源于stack exchange,提问作者Trifon RAYKOV
相关产品推荐
相关产品推荐

