Как сделать проверку на int, если число отправляется в виде str?

Есть тг бот и список, который создается из сообщений пользователя. В данном случае из цифр. Проблема в том, что любое сообщение получается в виде строки. То есть сообщение 1000 будет равно str(1000) или '1000'. Необходимо сделать проверку, является ли сообщение числом. И если это число, то добавить в список. Я сделал так:

    if int(message.text) % 1 == 0:
        messages.append(message.text)

Но в таком случае выходит ошибка, если я пробую сделать другое условие, например:

    elif message.text == 're':
        messages.append(message.text)

Может есть другой способ проверить является ли сообщение числом? Без преобразования в int прямо в условии


Ответы (1 шт):

Автор решения: denisnumb

У строки есть встроенные методы для таких проверок:

message.text.isdigit()

Результат:

message.text = '1234'
print(message.text.isdigit())
# True
message.text = '1234qwe'
print(message.text.isdigit())
# False

Однако надо учесть, что числа с плавающей точкой эту проверку проходить не будут:

message.text = '12.56'
print(message.text.isdigit())
# False

Поэтому стоит поискать другой метод проверки или написать что-то вроде этого:

def is_number(str):
    try:
        float(str)
        return True
    except ValueError:
        return False
message.text = '12.56'
print(is_number(message.text))
# True
→ Ссылка