← Все вопросы
Как проверить, что строка — корректное число (с минусом и точкой)? isdigit не подходит
18
Пользователь вводит '-3.14', а isdigit() возвращает False из-за минуса и точки. Как нормально проверить, что строку можно превратить в число?
4 ответа
27
✓ Принятый ответ — помог автору
isdigit() для дробных и отрицательных не работает в принципе. Самый надёжный способ — попробовать сконвертировать и поймать ошибку:
def is_number(s):
try:
float(s)
return True
except ValueError:
return False
is_number('-3.14') # True
is_number('1e5') # True
is_number('abc') # False
Это покрывает минус, точку, экспоненту и пробелы по краям — всё, что понимает сам float. Подход «легче попросить прощения, чем разрешения» — очень питоничный.
Евгений Курмыса float('nan') и float('inf') тоже пройдут — иногда это не нужно · 13 месяцев назад
Данил Киселёв EAFP рулит, регуляркой замучаешься все случаи описывать · 13 месяцев назад
9
Если именно целое со знаком — можно регуляркой: re.fullmatch(r'-?\d+', s). Для дробных: r'-?\d+(\.\d+)?'. Но try/float проще и надёжнее.
4
Через try: float(s).
-5
Используй s.isdigit(). (не сработает с минусом и точкой — именно поэтому автор и спрашивает)
Анна Королёва Так в этом и проблема, isdigit как раз не годится · 13 месяцев назад
Ваш ответ
Войдите, чтобы ответить на вопрос.