Python使用pynput写keylogger报NameError: key未定义如何解决
报错原因
该错误由Python变量作用域规则和代码执行顺序问题共同导致:
key是anonymous回调函数的入参,仅在函数内部有效,函数外部无法访问该变量- 你将写文件、打印
key的逻辑写在了anonymous函数外部,代码启动后会立刻执行这部分逻辑,此时还没有触发任何按键事件,key变量完全未定义,直接触发NameError,甚至都不会执行到后续启动监听器的代码。
修复方法
将写文件、打印key的逻辑缩进调整到anonymous函数内部,保证只有按键触发回调时才会执行这部分逻辑,修改后完整代码如下:
from pynput.keyboard import Listener def anonymous(key): key = str(key) if key == "Key.f12": raise SystemExit(0) if key == "Key.ctrl_l": print("") # 以下两行缩进移到函数内部 with open("log.txt", "a") as file: file.write(key) print(key) with Listener(on_press=anonymous) as listener: listener.join()
内容的提问来源于stack exchange,提问作者CæsarX
相关产品推荐
相关产品推荐

