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
相关产品推荐
相关产品推荐

