Как проверить, могла ли строка быть преобразована тип для плавания в Python? [дубликат]

Этот вопрос уже имеет ответ здесь:

Есть ли некоторая функция как str.isnumeric но применимый к плаванию?

'13.37'.isnumeric() #False  

Я все еще использую это:

def isFloat(string):
    try:
        float(string)
        return True
    except ValueError:
        return False
26
задан mskfisher 10 May 2012 в 17:15
поделиться

3 ответа

Как говорит Имран, ваш код абсолютно хорош, как показано.

Тем не менее, он побуждает клиентов isFloat идти по пути «Посмотрите, прежде чем прыгать» вместо более питонического пути «Проще просить прощения, чем разрешения».

Для клиентов больше Python предполагать, что у них есть строка, представляющая число с плавающей запятой, но быть готовыми обработать исключение, которое будет сгенерировано, если это не так.

Этот подход также имеет приятный побочный эффект - преобразование строки в число с плавающей запятой один раз вместо двух.

12
ответ дан 28 November 2019 в 17:24
поделиться

Ваш код в порядке. Решения на основе регулярных выражений более склонны к ошибкам.

Быстрое тестирование с timeit показывает, что float (str_val) действительно быстрее, чем re.match ()

>>> timeit.timeit('float("-1.1")')
1.2833082290601467
>>> timeit.timeit(r"pat.match('-1.1')", "import re; pat=re.compile(r'^-?\d*\.?\d+(?:[Ee]-?\d+)?$');")
1.5084138986904527

И используемое выше регулярное выражение не работает в одном пограничном случае, оно не может соответствовать '- 1.' , хотя float () с радостью преобразует его в правильное значение с плавающей запятой.

2
ответ дан 28 November 2019 в 17:24
поделиться

isinstance (myVariable, float) будет работать, если вы тестируете переменную с плавающей запятой.

Редактировать: Слишком рано заговорил, не совсем понял, что вы пытались получить.

-1
ответ дан 28 November 2019 в 17:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: