La fonction lamda dans @ bot.message_handler () ne fonctionne pas correctement dans telebot python
J'ai essayé d'implémenter la ligne de code suivante dans un script python pour un bâtiment de robot de télégramme à l'aide de 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')
Le code ci-dessus me donne une erreur de syntaxe.
@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')
Ce code résout l'erreur de syntaxe, mais il ne fait toujours pas ce que je veux qu'il fasse. Lorsqu'un utilisateur envoie «/ teste du texte», je veux l'identifier et faire quelques actions par la suite.
Je suis relativement nouveau en python et c'est la première fois que j'utilise les fonctions telebot et lambda. Alors s'il vous plaît aidez-moi
- identifier pourquoi le 1er code m'a donné une erreur de syntaxe.
- Comment implémenter cela commence par ('/ test') correctement. Merci d'avance.
Réponses
Comme l'opérateur ternaire a une syntaxe spécifique, cela doit être suivi:
<value if True> if <condition> else <value if False>
Ce que vous avez fait dans le premier échantillon est:
<value if True> if <condition>
Et tu n'as pas à le faire comme tu l'as fait
True if msg.text.startswith('/test') else False
.startswith()revient tout boolseul.
On ne sait pas ce que fait le décorateur, mais pourquoi ne pas simplement effectuer la vérification à l'intérieur de la fonction?
@bot.message_handler
def test_start(message):
if msg.startswith('/test'):
msg=bot.send_message(message.chat.id,'This is feature is under developement')