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

Aiogram 2中回调数据返回字符串而非布尔值,如何修复?

Aiogram 2 回调数据布尔值类型转换问题解决方法

在Aiogram 2中,回调数据里的布尔值会被序列化为字符串"True"或"False",而非原生布尔类型,以下是几种可行的解决方式:

1. 接收回调时手动转换类型

在处理回调的函数中,直接将字符串形式的布尔值转换为原生布尔类型:

@dp.callback_query_handler(faq_callback.filter())
async def handle_faq_callback(callback_query: types.CallbackQuery, callback_data: dict):
    # 把字符串"True"/"False"转为实际布尔值
    iftext = callback_data.get('iftext') == 'True'
    # 后续逻辑使用转换后的iftext变量
    await callback_query.answer()

2. 传递时用整数替代布尔值

传递回调数据时,用1代表True,0代表False,接收时再转回布尔类型:

传递侧代码

# 用1/0替代bool值
callback_data = faq_callback.new(action='faqAct', id=int(i.get('id')), iftext=1 if hastext else 0)

接收侧代码

@dp.callback_query_handler(faq_callback.filter())
async def handle_faq_callback(callback_query: types.CallbackQuery, callback_data: dict):
    iftext = bool(int(callback_data.get('iftext')))
    await callback_query.answer()

3. 自定义过滤器自动处理类型转换

通过自定义过滤器,在回调进入处理函数前自动完成类型转换,避免重复代码:

from aiogram.dispatcher.filters import Filter

class BoolFieldConverter(Filter):
    def __init__(self, field_name: str):
        self.field_name = field_name

    async def check(self, callback_query: types.CallbackQuery, callback_data: dict):
        if self.field_name in callback_data:
            # 自动将字符串布尔值转为原生类型
            callback_data[self.field_name] = callback_data[self.field_name] == 'True'
        return True

# 使用时给handler添加该过滤器
@dp.callback_query_handler(faq_callback.filter(), BoolFieldConverter(field_name='iftext'))
async def handle_faq_callback(callback_query: types.CallbackQuery, callback_data: dict):
    # 此处callback_data['iftext']已经是原生布尔值
    await callback_query.answer()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:01:12