Telegram Bot开发遇TypeError:一元运算符~操作数类型错误
解决Telegram Bot的TypeError: bad operand type for unary ~: 'type'错误
问题原因
你遇到的错误是因为直接将~操作符作用在了过滤器类上,而非过滤器实例。filters.Text和filters.Command是类(type类型),~操作符仅能用于过滤器实例,因此触发类型错误。
解决方案
根据你使用的python-telegram-bot版本,选择对应修正方式:
版本v13.x及以上(推荐)
该版本官方提供了预定义的过滤器实例,直接调用即可:
def main(): updater = Updater(bot="Telegram API key", update_queue=my_queue) conv_handler = ConversationHandler( entry_points=[CommandHandler('start', start)], states={ RECIPIENT_NAME: [MessageHandler(filters.TEXT & ~filters.COMMAND, callback=recipient_name)], RECIPIENT_NUMBER: [MessageHandler(filters.TEXT & ~filters.COMMAND, callback=recipient_number)], SERVICE: [MessageHandler(filters.TEXT & ~filters.COMMAND, callback=service)], VERIFY_IDENTITY: [MessageHandler(filters.TEXT & ~filters.COMMAND, callback=verify_identity)] }, fallbacks=[CommandHandler('cancel', cancel)], )
- 用
filters.TEXT替换filters.Text:filters.TEXT是预定义实例,匹配任意文本消息 - 用
~filters.COMMAND替换~filters.Command:filters.COMMAND是预定义实例,匹配任意命令消息,~取反后表示排除命令消息
版本v12.x及以下
该版本需要手动实例化过滤器类:
def main(): updater = Updater(bot="Telegram API key", update_queue=my_queue) conv_handler = ConversationHandler( entry_points=[CommandHandler('start', start)], states={ RECIPIENT_NAME: [MessageHandler(filters.Text() & ~filters.Command(), callback=recipient_name)], RECIPIENT_NUMBER: [MessageHandler(filters.Text() & ~filters.Command(), callback=recipient_number)], SERVICE: [MessageHandler(filters.Text() & ~filters.Command(), callback=service)], VERIFY_IDENTITY: [MessageHandler(filters.Text() & ~filters.Command(), callback=verify_identity)] }, fallbacks=[CommandHandler('cancel', cancel)], )
- 给
filters.Text和filters.Command添加括号(),创建过滤器实例后再使用&和~操作符
内容的提问来源于stack exchange,提问作者isaac palakunnel
相关产品推荐
相关产品推荐

