isDigit () для рациональных чисел? - PullRequest
4 голосов
/ 20 мая 2009

Я пытаюсь оценить, является ли строка в одном из текстовых полей моего интерфейса числом (т. Е. Не текстом или чем-либо еще). В Python есть метод isdigit (), который возвращает True, если строка содержит только цифры (без отрицательных или десятичных знаков). Есть ли другой способ, которым я мог бы оценить, является ли моя строка рациональным числом (например: 1.25).

Пример кода:

if self.components.txtZoomPos.text.isdigit():
        step = int(self.components.txtZoomPos.text)

Ответы [ 5 ]

5 голосов
/ 20 мая 2009

1,25 - это обозначение, обычно используемое для вещественных чисел , меньше для рациональных чисел . float Python вызовет ValueError , если преобразование не удастся. Таким образом:

def isReal(txt):
    try:
        float(txt)
        return True
    except ValueError:
        return False
1 голос
/ 04 октября 2011

Существующие ответы верны в том смысле, что более Pythonic путь обычно к try...except (т.е. EAFP).

Однако, если вы действительно хотите выполнить проверку, вы можете удалить ровно 1 десятичную точку перед использованием isdigit().

>>> "124".replace(".", "", 1).isdigit()
True
>>> "12.4".replace(".", "", 1).isdigit()
True
>>> "12..4".replace(".", "", 1).isdigit()
False
>>> "192.168.1.1".replace(".", "", 1).isdigit()
False

Обратите внимание, что это не относится к плавающим предметам, однако отличается от целых. Вы можете добавить эту проверку, если она вам действительно нужна.

1 голос
/ 20 мая 2009

try / catch очень дешевый в Python, и попытка построить float из строки, не являющейся числом, вызывает исключение:

>>> float('1.45')
1.45
>>> float('foo')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): foo

Вы можете просто сделать что-то вроде:

try:
    # validate it's a float
    value = float(self.components.txtZoomPos.text)
except ValueError, ve:
    pass # your error handling goes here
0 голосов
/ 20 мая 2009

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

0 голосов
/ 20 мая 2009

int () или float () выдает ValueError, если литерал недействителен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...