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

为何仅需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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 13:03:16