首页 > 解决方案 > @bot.message_handler() 中的 lamda 函数在 Telebot python 中无法正常工作

问题描述

我尝试在 python 脚本中实现以下代码行,以便使用 Telebot 构建电报机器人。

@bot.message_handler(func=lambda msg:True if msg.text.startswith('/test'))
def test_start(message):
    msg=bot.send_message(message.chat.id,'This is feature is under developement')

上面的代码给了我一个语法错误。

@bot.message_handler(func=lambda msg:True if msg.text.startswith('/test') else False)
def test_start(message):
    msg=bot.send_message(message.chat.id,'This is feature is under developement')

这段代码解决了语法错误,但仍然没有做我想做的事。当用户发送“/测试一些文本”时,我想识别它并在此之后执行一些操作。

我对 python 比较陌生,这是我第一次使用 Telebot 和 lambda 函数。所以请帮助我

  1. 确定为什么第一个代码给了我一个语法错误。
  2. 如何正确实现此startswith('/test')。非常感谢你。

标签: pythonif-statementlambdatelegramtelegram-bot

解决方案


因为三元运算符具有特定的语法,所以必须遵循:

<value if True> if <condition> else <value if False>

您在第一个示例中所做的是:

<value if True> if <condition>

你也不必像以前那样做

True if msg.text.startswith('/test') else False

.startswith()bool自行返回。

目前还不清楚装饰器的作用,但为什么不直接在函数内部执行检查呢?

@bot.message_handler
def test_start(message):
    if msg.startswith('/test'):
        msg=bot.send_message(message.chat.id,'This is feature is under developement')

推荐阅读