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

aiogram内联按钮点击报错:无法在await表达式中使用bool对象

问题原因分析

错误的核心在于回调查询处理器的注册方式错误:
在handlers_admin函数中,这行代码存在致命问题:

dp.register_callback_query_handler(lambda x: x.data and x.data.startswith('del '))

register_callback_query_handler的第一个参数必须是异步处理函数,但这里传入的是一个返回布尔值的lambda表达式。当Telegram触发回调查询时,调度器会尝试await这个lambda的返回值(布尔值),而布尔值不是可等待对象,因此抛出TypeError: object bool can't be used in 'await' expression。

解决方法

修改回调处理器的注册代码,将del_callback作为处理函数传入,把lambda作为过滤条件放在参数末尾:

dp.register_callback_query_handler(del_callback, lambda x: x.data and x.data.startswith('del '))
额外优化建议
  • 可以使用aiogram内置的Text过滤器简化判断逻辑,代码更易读:
    from aiogram.dispatcher.filters import Text
    # 替换原注册代码
    dp.register_callback_query_handler(del_callback, Text(startswith='del '))
    
  • SQLite操作函数无需定义为async函数(sqlite3是同步库,异步包装无意义),改为普通函数即可,同时调用时去掉await:
    # 修改sqlite_db.py中的函数
    def sql_scan():
        return cur.execute('SELECT * FROM menu').fetchall()
    
    def sql_delete(data):
        print('done')
        cur.execute('DELETE FROM menu WHERE name == ?', (data,))
        base.commit()
    
    # 在cm_delete中调用
    data = sqlite_db.sql_scan()
    # 在del_callback中调用
    sqlite_db.sql_delete(query.data.replace('del ', ''))
    

内容的提问来源于stack exchange,提问作者Владислав Дирявка

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 23:27:58