为何仅需1个位置参数的move()函数被传入2个参数?
错误原因分析与解决办法
你的问题核心在于keyboard.add_hotkey的参数传递逻辑与回调函数的参数需求不匹配:
错误根源
在你的代码中,actions数组里move对应的第三个元素是列表(比如[0, -1]),当你通过keyboard.add_hotkey(actions[x][0], actions[x][1], actions[x][2])设置热键时,actions[x][2]会被传入add_hotkey的可变参数*args中。而add_hotkey内部会通过callback(*args)的方式调用回调函数——这意味着[0, -1]会被拆成两个独立参数(0和-1)传递给move。
但你的move函数定义只接受1个位置参数(比如def move(delta): ...),这时调用move(0, -1)就会触发TypeError: move() takes 1 positional argument but 2 were given的错误。
解决方法
根据move函数的实际参数需求,二选一修改:
情况1:move需要接收两个独立参数(比如x、y偏移量)
在调用add_hotkey时解包列表,把列表元素作为单独参数传递:
import keyboard actions = [['left', move, [0, -1]], ['right', move, [0, 1]], ['up', rotate, 'left'], ['down', rotate, 'right']] for hotkey, callback, args in actions: # 用*解包列表,将元素作为独立参数传入 keyboard.add_hotkey(hotkey, callback, *args)
情况2:move只需要接收一个列表/元组参数
把参数包装成单元素容器,避免被拆包,修改actions定义:
import keyboard # 将move的参数用额外列表包裹,确保传递时不被拆包 actions = [['left', move, [[0, -1]]], ['right', move, [[0, 1]]], ['up', rotate, ['left']], ['down', rotate, ['right']]] for hotkey, callback, args in actions: keyboard.add_hotkey(hotkey, callback, args)
内容的提问来源于stack exchange,提问作者user31716681
相关产品推荐
相关产品推荐

