Как проверить, является ли строка числом (с плавающей запятой)? - PullRequest
1418 голосов
/ 09 декабря 2008

Каков наилучший способ проверить, может ли строка представляться как число в Python?

У меня сейчас есть функция:

def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

Что не только уродливо и медленно, но кажется неуклюжим. Однако я не нашел лучшего метода, потому что вызов float в основной функции еще хуже.

Ответы [ 33 ]

0 голосов
/ 25 мая 2013

Вы можете обобщить технику исключений полезным способом, возвращая больше полезных значений, чем True и False. Например, эта функция помещает кавычки в круглые строки, но оставляет числа в покое. Это как раз то, что мне было нужно для быстрого и грязного фильтра, чтобы сделать некоторые определения переменных для R.

import sys

def fix_quotes(s):
    try:
        float(s)
        return s
    except ValueError:
        return '"{0}"'.format(s)

for line in sys.stdin:
    input = line.split()
    print input[0], '<- c(', ','.join(fix_quotes(c) for c in input[1:]), ')'
0 голосов
/ 09 ноября 2014

Я работал над проблемой, которая привела меня к этой теме, а именно, как преобразовать коллекцию данных в строки и числа наиболее интуитивно понятным способом. После прочтения исходного кода я понял, что то, что мне было нужно, отличалось двумя способами:

1 - я хотел получить целочисленный результат, если строка представляла целое число

2 - я хотел, чтобы число или строковый результат вставлялись в структуру данных

поэтому я адаптировал исходный код для получения этой производной:

def string_or_number(s):
    try:
        z = int(s)
        return z
    except ValueError:
        try:
            z = float(s)
            return z
        except ValueError:
            return s
0 голосов
/ 30 мая 2015

Попробуйте это.

 def is_number(var):
    try:
       if var == int(var):
            return True
    except Exception:
        return False
...