Как избежать ошибки, если пользователь вводит не число?

Чтобы избежать ошибки, если пользователь вводит не число, можно использовать блок try-except. В блоке try попытаться преобразовать ввод в число (например, с помощью int() или float()). Если возникнет исключение ValueError (или другое подходящее), в блоке except обработать ошибку (например, вывести сообщение об ошибке и попросить пользователя ввести число снова).

Чтобы избежать ошибки, если пользователь вводит не число, можно использовать несколько подходов:

  1. Обработка исключений (try-except): Это самый распространенный и Pythonic способ. Мы пытаемся преобразовать ввод пользователя в число, и если это не удается (например, возникает `ValueError`), мы перехватываем исключение и выполняем альтернативный код.
    
    try:
        user_input = input("Введите число: ")
        number = int(user_input)  # Или float(user_input) для дробных чисел
        # Дальнейшая обработка числа...
        print("Вы ввели число:", number)
    except ValueError:
        print("Ошибка: Введенное значение не является числом.")
    except Exception as e: # Опционально, перехват всех остальных исключений
        print(f"Произошла неожиданная ошибка: {e}")
    
    
  2. Проверка типа строки с помощью строковых методов: Можно использовать методы строк, такие как `isdigit()` (для целых чисел) или `isnumeric()` (для более широкого набора чисел, включая юникодные цифры). Однако, этот метод не позволяет корректно обрабатывать отрицательные числа или числа с плавающей точкой без дополнительных проверок.
    
    user_input = input("Введите число: ")
    if user_input.isdigit(): # Для целых положительных чисел
        number = int(user_input)
        print("Вы ввели число:", number)
    elif user_input.replace('.', '', 1).isdigit(): # Для чисел с плавающей точкой (положительных)
        try:
            number = float(user_input)
            print("Вы ввели число с плавающей точкой:", number)
        except ValueError:
            print("Ошибка преобразования в float.")
    elif user_input.startswith('-') and user_input[1:].isdigit(): #Для отрицательных целых чисел
        number = int(user_input)
        print("Вы ввели отрицательное целое число:", number)
    else:
        print("Введенное значение не является числом.")
    
  3. Регулярные выражения: Регулярные выражения позволяют создавать более сложные шаблоны для проверки ввода. Это мощный, но более сложный подход.
    
    import re
    
    user_input = input("Введите число: ")
    pattern = r"^-?\d+(\.\d+)?$"  # Соответствует целым и дробным числам (с минусом или без)
    if re.match(pattern, user_input):
        try:
            number = float(user_input)
            print("Вы ввели число:", number)
        except ValueError: # на всякий случай
            print("Ошибка преобразования в float.")
    
    else:
        print("Введенное значение не является числом.")
    

Какой метод выбрать?

Метод `try-except` обычно является предпочтительным, так как он наиболее читаемый и соответствует принципам Python (EAFP - Easier to ask for forgiveness than permission). Строковые методы могут быть полезны для простой проверки, но становятся сложнее, когда требуется обработка различных форматов чисел. Регулярные выражения подходят для более сложных случаев, когда нужно проверять ввод на соответствие определенному формату.

Важно также учитывать контекст, в котором происходит ввод данных. Если требуется повторный ввод, можно организовать цикл, который будет запрашивать ввод до тех пор, пока не будет введено корректное число.


while True:
    try:
        user_input = input("Введите число: ")
        number = int(user_input)
        break  # Выходим из цикла, если ввод корректен
    except ValueError:
        print("Некорректный ввод. Пожалуйста, введите число.")

print("Вы ввели число:", number)
0