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

Telegram Bot调用自定义函数报keyF未定义错误如何修复

报错原因

comand函数中定义的keyF是函数局部变量,作用域仅在comand函数内部生效,函数执行完毕后局部变量会被销毁,外部的回调查询处理函数无法访问到该变量,因此触发name 'keyF' is not defined错误。

修复方法

调整comand函数逻辑,将构建完成的内联键盘对象作为返回值返回,调用comand时用变量接收返回值后,再作为reply_markup参数传入即可。

修复后代码如下:

def comand(a,b):
    keyF = types.InlineKeyboardMarkup(resize_keyboard=True)
    btnOne = types.InlineKeyboardButton(text="BACK PAGE", callback_data=a)
    btnTwo = types.InlineKeyboardButton(text="NEXT PAGE", callback_data=b)
    keyF.add(btnOne, btnTwo)
    # 返回构建好的键盘实例
    return keyF

@by.callback_query_handler(text="TWO1")
async def send_random_value(call: types.CallbackQuery):
    # 接收函数返回的键盘对象
    keyF = comand("TWO2", "TWOBACK1")
    await call.message.answer(lists[1], reply_markup=keyF)

注意:不建议为了方便在这个场景使用global声明全局变量,全局变量容易在多用户并发触发回调时出现键盘参数错乱的问题,用函数返回值传参是更安全规范的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:12:11