Что такое надежная функция isnumeric() для Python 3?

Я пытаюсь сделать то, что должно быть очень простым, и проверить, является ли значение в поле Entry действительным и реальным числом. Метод str.isnumeric() не учитывает отрицательные числа "-" или "." десятичные числа.

Я попытался написать функцию для этого:

def IsNumeric(self, event):
    w = event.widget
    if (not w.get().isnumeric()):
        if ("-" not in w.get()):
            if ("." not in w.get()):
                w.delete(0, END)
                w.insert(0, '')

Это работает нормально, пока вы не вернетесь и не наберете там буквы. Тогда это терпит неудачу.

Я исследовал возможность использования метода .split(), но не смог найти надежное регулярное выражение для него.

Это совершенно нормальная вещь, которую необходимо сделать. Любые идеи?


person texasman1979    schedule 15.06.2015    source источник
comment
связанные: Извлечь значение float/double   -  person jfs    schedule 23.06.2015


Ответы (2)


Похоже, вам просто нужно знать, даст ли передача некоторой строки в float результат (т.е. это хорошее числовое значение) или ошибку (т.е. строка не представляет число). Попробуй это:

def isnum(s):
    try:
        float(s)
    except:
        return(False)
    else:
        return(True)
person tegancp    schedule 15.06.2015
comment
Ловить все голым except — плохая идея. Вам также не нужны скобки вокруг False и True. - person Ethan Furman; 16.06.2015

person    schedule
comment
Если бы у меня были мозги, я бы подумал об этом. Нет причин, по которым нельзя обернуть функцию IsNumeric. :) - person texasman1979; 16.06.2015