2015-12-14 2 views
2

Мне нужно, чтобы пользователь вводил два числа, чтобы сформировать диапазон, и сделать сообщение об ошибке, если один или оба числа не введены или введено письмо. Что я делаю сейчасКоманда, чтобы проверить, существует ли переменная внутри строки

@bot.message_handler(commands=['set']) 
def handle_message(message): 
    if (message.text == '/set'): 
    bot.send_message(message.chat.id, 'put in a range') 
    elif message.text.split()[1].isdigit() : 
     bot.send_message(message.chat.id, "something") 
    elif message.text.split()[1].isdigit() == False: 
     bot.send_message(message.chat.id, 'Only letters!') 

Но проблема в том, что если пользователь ничего не ставить во 2-й переменной я получаю ошибку синтаксиса. Я пробовал использовать

except IndexError: 
    bot.send_message(message.chat.id, 'Only letters!') 

, но это возвращает SyntaxError. Что я ищу - это способ проверить, существует ли message.text.split()[2] (имеет любое значение), а затем проверить, является ли это цифрой.

+0

Вы уверены, что получаете ошибку синтаксиса (!), когда пользователь ничего не вводит? Это кажется непохожим. – timgeb

+1

'if len (message.text.split())> 1 и message.text.split() [1] .isdigit():'? – Kevin

ответ

2

Первое, что вы используете, это законный SyntaxError - вы не можете использовать except без try. См. Использование ниже.

Вторая вещь, с которой вы столкнетесь, - IndexError - что, если вы ищете второй параметр, когда существует меньше двух?

Первый посмотреть, прежде чем прыгать:

if len(message.text.split()) > 1: 
    # do check 

другой поймать TraceBack:

my_messages = [1] 
try: 
    my_messages[2] 
except IndexError: 
    print("length was too short to continue checking!") 

Где вы получаете строковые входы, вы также должны быть уверены, раздеться дополнительные пробелы, так как это может вас пошевелиться:

message = '1234 ' 
message.isdigit() 
# False! 

удалить пробелы, которые заставили бы это быть st ring:

message = message.strip() 
message.isdigit()