нужна помощь по PyTelegramBot
Пытаюсь учить PyTelegramBot и столкнулся с такой проблемой. сделал боту функцию решения примеров с помощью Eval у бота есть заготовленный ответ на не обрабатываемые Слова\символы но после добавления функции с решением примеров бот воспринимает неизвестные ему символы как переменные(насколько я понял) Пишу в чат например "и" в консоле выдает ошибку (name "и" is not dedined)
@bot.message_handler(content_types=['text'])
def get_text_messages(message):
if message.text == 'Привет':
bot.send_message(message.from_user.id,("Привет"))
elif "-" or "+" or "*" or "/" in message.text:
total = eval(message.text)
bot.send_message(message.from_user.id,(f"Ответ = {total}"))
else:
bot.send_message(message.from_user.id,("Я тебя не понимаю"))
Ответы (2 шт):
Вы можете сделать так:
@bot.message_handler(content_types=['text'])
def get_text_messages(message):
if message.text == 'Привет':
bot.send_message(message.from_user.id,"Привет")
elif "-" in message.text or "+" in message.text or "*" in message.text or "/" in message.text:
total = eval(message.text)
bot.send_message(message.from_user.id,f"Ответ = {total}")
else:
bot.send_message(message.from_user.id,"Я тебя не понимаю")
Как бы странно не выглядело, но зато вашей ошибки не будет
Данный код будет проверять, есть ли в message.text текст /,*,-,+
Я бы ещё порекомендовал сделать так:
@bot.message_handler(content_types=['text'])
def get_text_messages(message):
if message.text == 'Привет':
bot.send_message(message.from_user.id,"Привет")
elif "-" in message.text or "+" in message.text or "*" in message.text or "/" in message.text :
try:
total = eval(message.text)
bot.send_message(message.from_user.id,f"Ответ = {total}")
except SyntaxError:
bot.send_message(message.from_user.id,"Что?")
else:
bot.send_message(message.from_user.id,"Я тебя не понимаю"))
Вот этот код уже будет избегать ошибки, если вы просто введёте "-" ну или другое, то он ответит "Что?" вы можете сделать как хотите
Чуть более элегантным решением будет:
special_symbols = ['+', '-', '/', '/']
if message.text == 'Привет':
...
else:
for symbol in special_symbols:
if symbol in message.text:
...
#вычисляем выражение
break
else:
...
#другое действие
Если что, else тут не ошибка табуляции - он здесь именно для цикла for. Если break не будет использован, то будет выполнено то, что под else