Telegram Bot跨文件返回MENU状态失败,报未知状态错误
问题原因及解决方案
核心问题
你用range(0)作为对话状态标识是错误的选择。range(0)会生成一个空的range对象(range(0, 0)),虽然你在ConversationHandler的states里用它做键,但这类对象不适合作为对话状态——Telegram Bot的ConversationHandler要求状态是可哈希、语义明确的简单类型(比如字符串、整数),空range对象会被判定为未知状态,导致报错。
修复步骤
1. 替换状态标识类型
在main.py中,把MENU的定义从range(0)改为字符串或整数:
# 推荐用字符串,语义更清晰 MENU = "MENU" # 或者用整数也可以:MENU = 1
2. 同步更新ConversationHandler的states
main.py里的ConversationHandler部分保持变量引用即可,此时MENU已是合法的状态标识:
conversation = ConversationHandler( entry_points=[self.start_handler], states={ MENU: [self.menu_handler] }, fallbacks=[] )
3. 确保Start类返回正确状态
Start类的逻辑无需修改,只要传入的MENU是新定义的字符串/整数,返回self.MENU就能正确匹配对话状态。
额外提醒
你代码里还返回了CHOOSE_NETWORK,但这个状态并没有在ConversationHandler的states中定义,后续同样会触发类似的未知状态错误,记得补充对应的状态配置和处理逻辑。
内容的提问来源于stack exchange,提问作者rizlapaketti
相关产品推荐
相关产品推荐

